我有一个c ++代码库。我有一个CMakeLists。当我运行make
时,它会创建二进制文件myexec
。
我希望能够运行,比如make -- v2
,并且它会创建完全相同的二进制文件,但称为myexec_v2
。如果它不必重新编译所有内容来创建这个二进制文件,而只需要修改文件,那就太好了。
我该怎么做?
答案 0 :(得分:0)
myexec myexec_v2: $(prerequisites)
@echo $@
观察:
$ make myexec
myexec
$ make myexec_v2
myexec_v2
如果不需要其他任何内容来编译myexec_v2
,那么您就完成了。
有关更多信息,请参见此处:https://www.gnu.org/software/make/manual/html_node/Multiple-Targets.html
这是稍微高级一点的版本
myexec myexec_v2: myexec%: $(prerequisites)
@echo $@ $*
这称为静态模式规则。中间的myexec%
称为目标模式。在此示例中,我们仅使用它来获取所谓的词干。茎将为_v2
,变量$*
扩展为茎。
有关更多信息:https://www.gnu.org/software/make/manual/html_node/Static-Usage.html
观察:
$ make myexec
myexec
$ make myexec_v2
myexec_v2 _v2
现在您可以在配方中使用$@
或$*
来修改要在其上进行编译的行为。
但是如果您想在食谱中的分支上先阅读以下内容:Basic if else statement in Makefile