在 CMake 中默认构建自定义目标
Posted
技术标签:
【中文标题】在 CMake 中默认构建自定义目标【英文标题】:Build custom target by default in CMake 【发布时间】:2017-05-10 07:09:22 【问题描述】:我想用 cmake 运行一个自定义命令。这听起来像是一个非常简单的任务/问题,但很难找到一个例子。
这是我正在尝试做的事情:
$ cmake .
$ make
> Hello World! (Output)
在 Gnu 中制作非常简单:
bar:
echo Hello World!
但我正在尝试在 cmake 中执行此操作。根据我一直在阅读的内容,我应该可以使用下面的 CMakeLists.txt
文件来做到这一点:
cmake_minimum_required(VERSION 3.6)
project(foo)
add_custom_target(bar)
add_custom_command(
TARGET bar
COMMAND "echo Hello World!"
)
如果我只是打电话给make
,目前没有工作要做。我需要明确调用make bar
。如何将bar
添加到all
配方?
我尝试添加add_dependency(foo bar)
,但foo
是不存在的目标。如果有一些我不知道的超级目标,那将是完美的。然后我可以将它用作我的自定义命令的目标,而不用打扰bar
。
【问题讨论】:
【参考方案1】:使用ALL
选项构建目标默认:
add_custom_target(bar ALL)
【讨论】:
哇,这比我想做的要简单得多。【参考方案2】:当自定义命令实际产生一些东西时,而不是只打印“Hello World”,那么以下可能是合适的。
add_custom_target(Work ALL DEPENDS that.txt)
add_custom_command(
OUTPUT that.txt
COMMAND generator --from this.txt --produce that.txt
DEPENDS this.txt
)
【讨论】:
这很好用。如果另一个目标依赖于该自定义目标(即add_dependencies($PROJECT_NAME Work)
),您也不需要ALL
。【参考方案3】:
扩展 Tsyvarev 的完美答案,进一步简化 cmakelists.txt 文件,我们可以这样做:
cmake_minimum_required(VERSION 3.6)
project(foo)
add_custom_target(bar ALL
COMMAND "echo Hello World!"
)
这会将 custom_command 集成到 custom_target 中。
【讨论】:
以上是关于在 CMake 中默认构建自定义目标的主要内容,如果未能解决你的问题,请参考以下文章