【问题标题】:Build custom target by default in CMake在 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

【问题讨论】:

    标签: cmake


    【解决方案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 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      相关资源
      最近更新 更多