制定目标取决于执行

时间:2012-10-25 09:04:32

标签: makefile gnu-make

我希望我的make目标依赖于执行文件。例如,我有简单的makefile:

a.out: test.cpp
    gcc test.cpp

我想要这样的东西:

a.out: test.cpp, `which gcc`
    gcc test.cpp

这意味着更改gcc(特别是更新)将导致重建a.out(即使test.cpp未更改)。

但它看起来像是不成功的解决方案,因为您应该为此规则工具中使用的每个规则添加一个先决条件。

这个问题有其他解决方案吗?

1 个答案:

答案 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,如果您选择这样做,它也可以跟踪这些问题。