【问题标题】:How to call a CMake function from add_custom_target/command?如何从 add_custom_target/command 调用 CMake 函数?
【发布时间】:2014-09-24 18:47:54
【问题描述】:

是否可以从 add_custom_targetadd_custom_command 中调用 CMake 函数?

我知道我可以将 CMake 函数移动到 Python(或其他)脚本并从 add_custom_target/command 调用它,但我想避免在现有 CMake 基础设施旁边放置大量脚本。

我想要实现的是使用 CPack 生成二进制工件的 zip 包并将它们发布到工件存储库中。对于发布部分,我已经创建了 CMake 函数,但现在我需要将打包和发布结合在一起。

提前感谢您的任何帮助/提示。

【问题讨论】:

    标签: c++ cmake target cmake-custom-command


    【解决方案1】:

    我在为BVLC/Caffe 编写 CMake 构建系统时遇到了这个问题。我最终所做的是将函数内容放入一个单独的 CMake 脚本中,并通过调用从 add_custom_target 中调用它:

    add_custom_target(target_name
        COMMAND ${CMAKE_COMMAND} -P path_to_script
    )
    

    使用 -P 标志调用 CMake 使其充当脚本语言。您可以将任何 CMake 函数放入脚本中。

    【讨论】:

    • 令我惊讶的是,您不能直接从 add_custom_command 中调用像 FILE 这样的 cmake 命令
    • 看起来很有趣,是否保留了父 CMake 文件定义?
    • 实际上,我发现它没有,但是您可以添加一堆 -D 切换到“转发”现有定义到子 CMake 脚本: add_custom_command( OUTPUT Dockerfile.base COMMAND ${CMAKE_COMMAND } -D DISTRO_NAME=${DISTRO_NAME} -D DISTRO_VERSION=${DISTRO_VERSION} -D PROJECT_TEMPLATE_DIR=${PROJECT_TEMPLATE_DIR} -P ${CMAKE_MODULE_PATH}/ConfigureDockerfileBase.cmake COMMENT "配置 Dockerfile.base 文件。")
    • 如果我想实现这样的逻辑怎么办:仅在定义变量时执行该脚本?我应该如何在add_custom_target 中写这个? @亚当
    • 当函数位于.cmake 文件中时效果很好,是否可以选择调用在同一个 CMakeLists.txt 文件中定义的函数? @Adam Kosiorek
    【解决方案2】:

    我找了同样的东西,几分钟后我意识到这是不可能的,因为 cmake 是一个构建生成器生成器。

    当 cmake 不存在时,此命令将在不同的时间运行,例如从您的 IDE 中运行。

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多