我希望我的make目标依赖于执行文件。例如,我有简单的makefile:
a.out: test.cpp
gcc test.cpp
我想要这样的东西:
a.out: test.cpp, `which gcc`
gcc test.cpp
这意味着更改gcc(特别是更新)将导致重建a.out(即使test.cpp未更改)。
但它看起来像是不成功的解决方案,因为您应该为此规则工具中使用的每个规则添加一个先决条件。
这个问题有其他解决方案吗?
答案 0 :(得分:1)
在GNU make
生成文件中,您可以使用:
CC := $(shell which gcc)
a.out: test.cpp ${CC}
${CC} -o $@ test.cpp
请注意,构建只会在编译器可执行文件被修改时触发,而不仅仅是因为它与上次构建程序时不同。从历史上看,SUN make
有一个'.make.state'文件和一个.KEEP_STATE
目标,可以跟踪这些事情。 IBM Rational ClearCase有一个clearmake
,如果您选择这样做,它也可以跟踪这些问题。