【问题标题】:make with argument for different executable name为不同的可执行文件名称制作参数
【发布时间】:2016-05-19 14:21:46
【问题描述】:

我有一个 C++ 代码库。我有一个 CMakeLists。当我运行make 时,它会创建二进制文件myexec

我希望能够运行make -- v2,它会创建完全相同的二进制文件,但称为myexec_v2。如果它不必重新编译所有内容来创建此二进制文件,而只需重新编译修改过的文件,那就太好了。

我该怎么做?

【问题讨论】:

  • 不是答案,但不可能的解决方法是编写一个小脚本来执行 1) make 然后 2) 根据使用“移动”或'copy',哪个合适?

标签: c++ linux makefile cmake


【解决方案1】:
myexec myexec_v2: $(prerequisites)
    @echo compile $@

观察:

$ make myexec
compile myexec
$ make myexec_v2
compile myexec_v2

如果编译 myexec_v2 不需要其他任何东西,那么你就完成了。

查看这里了解更多信息:https://www.gnu.org/software/make/manual/html_node/Multiple-Targets.html

这是一个稍微高级一点的版本

myexec myexec_v2: myexec%: $(prerequisites)
    @echo compile $@ $*

这称为静态模式规则。中间的myexec% 称为目标模式。在这个例子中,我们只使用它来获取所谓的词干。词干为_v2,变量$* 扩展为词干。

更多信息:https://www.gnu.org/software/make/manual/html_node/Static-Usage.html

观察:

$ make myexec
compile myexec
$ make myexec_v2
compile myexec_v2 _v2

现在您可以在配方中使用$@$* 来修改要编译的行为或其他。

但如果你想这样做,如果配方中的分支首先阅读此内容:Basic if else statement in Makefile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2018-02-04
    • 2017-09-29
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多