Gnu从扩展的文件列表中创建目标

时间:2015-03-16 22:50:21

标签: windows design-patterns makefile rules

我正在对某些类型的文件进行分组,例如: https://www.gnu.org/software/make/manual/html_node/Wildcard-Function.html

大约100个子目录......

CC_FILES_TO_BUILD += $(wildcard $(SRC_DIR)/01-Application/*.c) 

ASM_FILES_TO_BUILD += $(wildcard $(PROJECT_ROOT)/01-Sources/07-Target/01-MC9S12G/04-STARTUP/01-CPL_LIB/*.s)

当我按规则转储例如CC_FILES_TO_BUILD时,我得到了很好的文件名列表:

E:\1983_1\02-Safety>make dump-CC_FILES_TO_BUILD
make[1]: Entering directory `E:/1983_1/02-Safety/01-Application'
E:\1983_1\02-Safety\01-Application/01-Sources//01-Application/01-INIT/app_init.c E:\1983_1\02-Safety\01-Application/01-Sources//01-Applicat
ion/02-MAIN/app.c E:\1983_1\02-Safety\01-Application/01-Sources//01-Application/03-FM/fm.c E:\1983_1\02-Safety\01-Application/01-Sources//01
-Application/05-SMCM/SMCM.c E:\1983_1\02-Safety\01-Application/01-Sources//01-Application/06-LIM/LIM.c  E:\1983_1\02-Safety\01-Application/0
 1-Sources//02-Services/01-CanM/can_user.c E:\1983_1\02-Safety\01-Application/01-Sources//02-Services/01-CanM/v_par.c E:\1983_1\02-Safety\01-
 Application/01-Sources//02-Services/01-CanM/vstdlib.c E:\1983_1\02-Safety\01-Application/01-Sources//02-Services/01-CanM/sip_vers.c ...
......make[1]: Leaving directory `E:/1983_1/02-Safety/01-Application'

然后我通过普通的subst构建新的列表来获取相应的depend和obj文件列表,如:

CC_TO_MAK_BUILD_LIST = $(call unique, $(foreach src,$(CC_FILES_TO_BUILD ),
$(DEP_PATH)\$(basename $(notdir$(subst,\,/,$(SRC)))).$(MAK_FILE_SUFFIX)))

然后我希望将这些依赖和obj列表用作规则中的目标,如:

$(filter-out $(GCC_IGNORE_LIST), $(CC_TO_MAK_BUILD_LIST)) :$(DEP_OUTPUT_PATH)\\%.$(MAK_FILE_SUFFIX):$(DEPEND_FORCE) |  $(DEPEND_CPP_OPTIONS_FILE) $(DIRECTORIES_TO_CREATE)
$(SEPARATOR) [depend]   $(notdir $@)
$(CPP) @$(DEPEND_CPP_OPTIONS_FILE) -undef -MM -MF "$@" -MT "$(call depend_get_target,$@)" -MT "$@" "$(getSourceFile)" 

然后目标依赖:

depend: $(LIB_TO_MAK_BUILD_LIST) $(CC_TO_MAK_BUILD_LIST) | $(DEPEND_CPP_OPTIONS_FILE) $(DIRECTORIES_TO_CREATE) 

和输出:

E:\1983_1\02-Safety\01-Application>make depend
* [build]       depend.cpp_options
E:\1983_1\02-Safety\01-Application>
尽管依赖文件(* .mak)不存在,但显然没有什么可做的。没有武力或虚假可以为我解决它。

0 个答案:

没有答案