2012-10-25 25 views
1

我想让我的目标依赖执行文件。比如我有简单的makefile:使目标取决于执行

a.out: test.cpp 
    gcc test.cpp 

我想这样的事情:

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

这意味着改变你的gcc(尤其是更新)会导致的a.out的重建(即使测试。 CPP没有改变)。

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

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

+1

解决方案是,当你更改'gcc'版本时,你通常会*知道*。这不是定期进行的改变,而是在开发过程中很少发生。因此,当用户知道'gcc'改变时,他/她可以发出'make clean'命令来重建下一个'make'上的所有内容。 –

+0

另外,请注意,只有当您使用的GCC自上次编译以来已被修改时,才会触发重新编译,而不仅仅因为它与上次使用的程序不同。 –

+0

谢谢!我当然明白,这真的是我想要的。 –

回答

1

在GNU make makefile文件,你可以使用:

CC := $(shell which gcc) 

a.out: test.cpp ${CC} 
    ${CC} -o [email protected] test.cpp 

注意,构建只会如果编译器可执行文件被修改,引发不只是因为它是从最后一次程序始建不同。历史上,SUN make有一个'.make.state'文件和一个跟踪这种事情的目标。 IBM Rational ClearCase有一个clearmake,如果您选择这样做,它也会跟踪这些问题。