Makefile 使目标依赖于执行
我希望make目标依赖于执行文件。例如,我有一个简单的makefile:Makefile 使目标依赖于执行,makefile,gnu-make,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没有更改) 但它看起来像一个不成形的解决方案,因为您应该为该规则工具中使用的每个规则添加一个附加的先决条件 这个问题还有其他解决方案吗?在GNUmakemakefile中
a.out: test.cpp
gcc test.cpp
我想要这样的东西:
a.out: test.cpp, `which gcc`
gcc test.cpp
这意味着更改gcc(特别是更新)将导致重建a.out(即使test.cpp没有更改)
但它看起来像一个不成形的解决方案,因为您应该为该规则工具中使用的每个规则添加一个附加的先决条件
这个问题还有其他解决方案吗?在GNU
make
makefile中,您可以使用:
CC := $(shell which gcc)
a.out: test.cpp ${CC}
${CC} -o $@ test.cpp
请注意,只有当编译器可执行文件被修改时,构建才会触发,而不仅仅是因为它与上次构建程序时不同。历史上,SUN
make
有一个“.make.state”文件和一个.KEEP_state
目标,用于跟踪这些事情。IBM Rational ClearCase有一个clearmake
,如果您选择这样做,它也会跟踪这些问题。在GNUmake
make文件中,您可以使用:
CC := $(shell which gcc)
a.out: test.cpp ${CC}
${CC} -o $@ test.cpp
请注意,只有当编译器可执行文件被修改时,构建才会触发,而不仅仅是因为它与上次构建程序时不同。历史上,SUN
make
有一个“.make.state”文件和一个.KEEP_state
目标,用于跟踪这些事情。IBM Rational ClearCase有一个clearmake
,如果您选择这样做,它也会跟踪这些问题。解决方案是,您通常知道何时更改gcc
版本。这不是一个定期进行的更改,而是在开发过程中很少进行的更改。因此,用户知道,gcc
发生了变化,他/她可以发出make clean
命令,在下一次make
上重建所有内容。另外,请注意,只有在您当前使用的gcc自上次生成程序以来已被修改的情况下,才会触发重新编译,不仅仅是因为它和你上次使用的程序不同。谢谢!我当然明白这一点,这正是我想要的。解决方案是,当您更改gcc
版本时,您通常会知道。这不是一个定期进行的更改,而是在开发过程中很少进行的更改。因此,用户知道,gcc
发生了变化,他/她可以发出make clean
命令,在下一次make
上重建所有内容。另外,请注意,只有在您当前使用的gcc自上次生成程序以来已被修改的情况下,才会触发重新编译,不仅仅是因为它和你上次使用的程序不同。谢谢!我当然理解,这是我真正想要的。