【发布时间】:2014-07-09 04:11:20
【问题描述】:
我有以下生成文件:
aCpp:=$(call rwildcard,$(srcDir),*.cpp)
aObjs=$(aCpp:.cpp=$(objEnd))
aObj=$(aObjs:$(srcDir)%=$(objDir)%)
totalCpp=$(words $(aCpp))
processed=
$(objDir)%$(objEnd): $(srcDir)%.cpp
$(CC) -MM -MP -MT $(df)$(objEnd) -MT $(df).d $(CFLAGS) $< > $(df).d
$(CC) -c $< $(CFLAGS) -o $@
$(eval processed+= x)
@echo "$(words $(processed)) out of $(totalCpp) compiled."
default: $(aObj)
我需要做的是让makefile测试并查看文件是否需要编译,然后如果它确实向变量添加了一个计数器,但没有编译,一旦所有这些都完成了,我就需要它再次进行编译。我或多或少需要$(objDir)%$(objEnd): $(srcDir)%.cpp 定义运行两次,但有两个不同的定义。
我想要这样做的全部原因是有一种更准确的方法来测量实际需要编译的文件数量而不是 5 out of 14 files processed. All done! 我希望它是模块化的并说 3 out of 3 或在下一个7 out of 8 而不是文件总数。
我是否必须在一个 makefile 中运行计数,将结果放在一个文件中,然后运行第二个 makefile?
【问题讨论】:
-
是否有目标将这些文件列为 prereqs eval 基于
$(words $?)帮助的 make 变量? (我不知道评估的顺序是否正确。) -
误解了,它只是针对要处理的文件总量,而不是实际编译的总量。
-
嗯?
$?是比目标更新的先决条件数。那应该只是与已更改的源文件匹配的目标文件。这不是你想要的号码吗? -
是但不,在编译运行先决条件的定义之前,我需要比可执行文件的目标更新的数量或先决条件。
-
而
eval在可执行目标的主体中运行得不够早吗?尝试将其作为特定于目标的变量(可能需要二次扩展才能工作)怎么样?