【问题标题】:make target depends on execution使目标取决于执行
【发布时间】:2012-10-25 21:07:17
【问题描述】:

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

a.out: test.cpp
    gcc test.cpp

我想要这样的东西:

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

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

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

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

【问题讨论】:

  • 解决办法是,当你更改gcc 版本时,你通常知道。这不是定期进行的更改,在开发过程中很少发生。因此,当用户知道gcc 发生变化时,他/她可以发出make clean 命令在下一个make 上重建所有内容。
  • 另外,请注意,仅当您当前使用的 GCC 自上次构建程序以来已被修改时才会触发重新编译,而不仅仅是因为它与您上次使用的程序不同。
  • 谢谢!我当然明白,这正是我想要的。

标签: makefile gnu-make


【解决方案1】:

在 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,如果您选择这样做,它也会跟踪此类问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-13
    • 2017-04-21
    • 2016-04-25
    • 2022-06-10
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多