OS := $(shell uname) ifeq ($(OS),Linux) ext = o cmd = build.sh else ext = exe cmd = build.bat endif serverNM := server.$(ext) clientNM := client.$(ext) programs := $(serverNM) $(clientNM) $(serverNM) libs = priv protocol $(wildcard *.conf) $(serverNM) objs = server impl.$(ext) server access.$(ext) $(clientNM) objs = client impl.$(ext) client api.$(ext) $(clientNM) libs = protocol all: $(programs) define ProgramTmp = $(1): $$($(1) objs) $$($(1) libs) endef $(foreach prog,$(programs),$(eval $(call ProgramTmp,$(prog)))) $(programs): $(cmd) $@ $^ %.conf : %.$(ext) genConf $^ -o $@ ifeq ($(OS),Linux) demo.o : demo.c linux.conf install $^ -o $@ else demo.exe : demo.c win.conf install.bat $^ -o $@ endef