Windows Gnu从扩展的文件列表中生成目标
我正在对某些类型的文件进行分组,如: 大约100个子目录Windows Gnu从扩展的文件列表中生成目标,windows,design-patterns,makefile,rules,Windows,Design Patterns,Makefile,Rules,我正在对某些类型的文件进行分组,如: 大约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_文件\u转储到\u BUILD时,我会得到一个很好的文件名列表:
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_文件\u转储到\u 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'
然后,我通过normalsubst构建新列表,以获得depend和obj文件的对应列表,如:
CC_TO_MAK_BUILD_LIST = $(call unique, $(foreach src,$(CC_FILES_TO_BUILD ),
$(DEP_PATH)\$(basename $(notdir$(subst,\,/,$(SRC)))).$(MAK_FILE_SUFFIX)))
然后我想将这些depend和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)不存在,但显然没有什么要做的。没有任何力量或谎言能帮我解决这个问题 “抄送”到“制作”列表的内容是什么?您提到了
CC\u FILES\u TO\u BUILD
和ASM\u FILES\u TO\u BUILD
,但没有提到该变量。MAK
也是打字错误吗?此外,您正在显式运行$(通配符)
您引用的手册部分此时不适用。它谈论的是*
扩展。你的问题到处都是;我不知道怎么了。请指定(a)您编写的实际生成规则,(b)您正在执行什么“正常子”来创建CC_to_MAK_BUILD_LIST
,(c)您调用的make命令(如果不仅仅是make
,则剪切/粘贴),(d)消息打印(请再次剪切和粘贴)和(e)这有什么不对/您预期会发生什么。很抱歉,问题太不清楚了…EtanReisner,我更正为CC_FILES_to_BUILD。CC_to_MAK_BUILD_列表是subst(edited)之后的一个示例。是的,我显式调用了通配符函数。引用不相关。疯狂科学家,我编辑以回答a)-d)注释。e) 我希望调用make depend,make将执行上面的目标($(CC_TO_MAK_BUILD_LIST)),它告诉我们如何构建列出的目标依赖项。希望更清楚。