#GO_SUBDIRS = aa bb cc dd #NORMAL_TARGETS = ss #SUBPRJ_TARGETS = tt #TOP_TARGETS = hh #USE_SELF_RULES = yes ###TEST NORMAL_TARGETS = fmwELnk fmwELnkLdr USE_SELF_RULES = no ifneq ($(USE_SELF_RULES),yes) ###################################################################### ###################################################################### ifeq ($(strip $(firstword $(GO_SUBDIRS)) $(firstword $(NORMAL_TARGETS)) \ $(firstword $(SUBPRJ_TARGETS)) $(firstword $(TOP_TARGETS))),) .PHONY: all clean all : @echo nothing defined for this makefile...have error in it clean : @echo nothing defined for this makefile...have error in it else #### ###################################################################### ifneq ($(words $(strip $(firstword $(GO_SUBDIRS)) $(firstword $(NORMAL_TARGETS)) \ $(firstword $(SUBPRJ_TARGETS)) $(firstword $(TOP_TARGETS)))),1) .PHONY: all clean all : @echo mulit target defined for this makefile...have error in it clean : @echo mulit target defined for this makefile...have error in it else #### ################################################################## ifneq ($(strip $(GO_SUBDIRS)),) ###Generate direct go sub dir cmd string#### GO_SUBDIR_MAK_CMD = $(foreach dir,$(GO_SUBDIRS),$(call gosubdirmak,$(dir))) GO_SUBDIR_CLR_CMD = $(foreach dir,$(GO_SUBDIRS),$(call gosubdirclr,$(dir))) .PHONY: all clean all: @ $(GO_SUBDIR_MAK_CMD) clean : @ $(GO_SUBDIR_CLR_CMD) ####build sub dir command string##### define gosubdirmak $(MAKE) -C $(1) BOARD=$(BOARD) TOOL=$(TOOL) endef ####clean sub dir command string##### define gosubdirclr $(MAKE) -C $(1) BOARD=$(BOARD) TOOL=$(TOOL) clean endef ############################################################################## else #### ################################################################## ifneq ($(strip $(NORMAL_TARGETS)),) ####PATTERN RULES FOR NORMAL BUILD###### $(RDIR)/%.o : %.c @ $(RM) $@ $(CC) $(CFLAGS) $(OPTION_DEPEND_GEN_D) $(CFLAGS_$(<:.c=.o)) $(OPTION_OBJECT_ONLY) $(OPTION_OBJECT_NAME)$@ $< ####TEST CONTENT GO fmwELnk_OBJS = \ $(RDIR)/el00mai.o \ $(RDIR)/el01ildr.o fmwELnkLdr_OBJS = \ $(RDIR)/el02eldr.o ####TEST CONTENT END RELEASE_NORMAL = $(strip $(foreach ro,$(NORMAL_TARGETS),$(call genNrelflist,$(ro)))) ESTRELS_NORMAL = $(foreach obj, $(RELEASE_NORMAL), $(wildcard $(obj))) DEPOBJS_NORMAL = $(strip $(foreach cgo,$(NORMAL_TARGETS),$(call genNdepoflist,$(cgo)))) ESTOBJS_NORMAL = $(foreach obj, $(DEPOBJS_NORMAL), $(wildcard $(obj))) DEPDDFS_NORMAL = $(filter %.d , $(ESTOBJS_NORMAL:.o=.d)) ESTDDFS_NORMAL = $(foreach obj, $(DEPDDFS_NORMAL), $(wildcard $(obj))) MISDDFS_NORMAL = $(filter-out $(ESTDDFS_NORMAL), $(DEPDDFS_NORMAL)) #MAKECMD_NORMAL = $(foreach tag,$(NORMAL_TARGETS),$(call genNmakecmd,$(tag))) ######################################################################### PROGRAMS = server client server_OBJS = server.o server_priv.o server_access.o client_OBJS = client.o client_api.o client_mem.o # Everything after this is generic .PHONY: all all: $(PROGRAMS) define PROGRAM_template $(1): $$($(1)_OBJS) @echo sdffsx endef $(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog)))) ############################################################################ ##INCLUDE EXIST D FIES FOR DEPENDENCY GET## ifneq ($(ESTDDFS_NORMAL),) include $(ESTDDFS_NORMAL) endif test : @echo 01.$(NORMAL_TARGETS) @echo 02.$(ESTRELS_NORMAL) @echo 03.$(DEPOBJS_NORMAL) @echo 04.$(ESTOBJS_NORMAL) @echo 05.$(DEPDDFS_NORMAL) @echo 06.$(ESTDDFS_NORMAL) @echo 07.$(MISDDFS_NORMAL) clean : @-$(RM) $(EXIST_OBJECTS) @-$(RM) $(EXIST_DFILES) @-$(RM) $(RELEASE) define genNrelflist $(ODIR)/$(1).o endef define genNdepoflist $($(1)_OBJS) endef else #### ################################################################## ifneq ($(strip $(SUBPRJ_TARGETS)),) else #### ################################################################## ifneq ($(strip $(TOP_TARGETS)),) endif ####TOP_TARGETSµÄÌõ¼þ½áβ endif ####SUBPRJ_TARGETSµÄÌõ¼þ½áβ endif ####NORMAL_TARGETSµÄÌõ¼þ½áβ endif ####GO_SUBDIRSµÄÌõ¼þ½áβ endif ####Ä¿±êÖظ´µÄÌõ¼þ½áβ endif ####Ä¿±êΪ¿ÕµÄÌõ¼þ½áβ else ####ʹÓùæÔòµÄ·´Ãæ,²»Ê¹ÓùæÔò,,,,ÏÂÃæµÄÄÚÈÝ×îÖÕ°æÒª°ÑÕâ¸öÀïÃæµÄÄÚÈÝÈ«²¿Çå¿ÕÄØ.. .PHONY: all clean all : $(shell echo dir) @echo "this is a test for make's all when not use rules" clean : @echo "this is a test for make's clean when not use rules" endif ####ʹÓùæÔòµÄÌõ¼þ½áβ