build - Cmake:如何在构建所有项目文件后运行 add_custom_command()

标签 build cmake

使用 Cmake v3.8,我需要我的自定义命令仅在生成新构建的 .hex、.map 和 .elf 文件后运行。但是,在生成所有 *.hex、*.map 和 *.elf 文件后,该命令并未真正运行。这是我所拥有的:

    add_custom_command(
    POST_BUILD
    COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/performCrc32.py
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    OUTPUT  performCrc32.out
    COMMENT "Running CRC32 check..."
)
add_custom_target(
    performCrc32 ALL
    DEPENDS performCrc32.py
    performCrc32.out
) 

我错过了什么,如果有的话?

最佳答案

没有办法在“构建完全完成后”执行添加命令。

  • 您可以在 之后添加要执行的命令具体目标建成:
    add_custom_command(TARGET <kernel-target> POST_BUILD
        COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/performCrc32.py
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
        COMMENT "Running CRC32 check..."
    )
    

  • 这将添加要在 <kernel-target> 之后执行的命令并且它的所有依赖项都将被构建。注意在这种情况下没有 OUTPUT 选项。

    这是构建后检查的首选方式,因为每次实际(重新)构建目标时都会执行检查。
  • 您可以将自定义命令绑定(bind)到自定义目标(像往常一样),然后添加 目标的依赖关系 :
    add_custom_command(
        COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/performCrc32.py
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
        OUTPUT  performCrc32.out
        COMMENT "Running CRC32 check..."
    )
    add_custom_target(
        performCrc32 ALL
        DEPENDS performCrc32.py
        performCrc32.out
    ) 
    
    add_dependencies(performCrc32 <hex-targets...> <map-targets> <elf-target>)
    

    在这种情况下,将在构建所有依赖目标后执行命令。但是,该命令只会在第一次构建时执行:一旦创建了 OUTPUT 文件,就不会再次执行该命令。

  • add_custom_command 的 POST_BUILD 选项仅适用于该命令的 TARGET 流,如上所述。我很好奇为什么当您使用没有 TARGET 的 POST_BUILD 时 CMake 不会为您的情况发出错误。

    关于build - Cmake:如何在构建所有项目文件后运行 add_custom_command(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44212101/

    相关文章:

    java - 在构建 war 期间替换文件内容(maven2)

    c++ - 包含 C++ 文件时构建失败

    cmake - CMake 错误消息 "install FILES given directory"是什么意思?

    cmake - 从外部项目中清除复制的文件

    c++ - CMake 用户构建的库;无法为目标指定链接库

    CMake:如何为安装不同的目标创建别名?

    c++ - Cmake 重新生成变量变化

    javascript - 修改 HTML 文件以将所有外部脚本和 CSS 嵌入到 &lt;script&gt; 和 &lt;style&gt; 标签中

    mercurial - 我使用 Mercurial Hook 将版本号嵌入到我的应用程序中的方法有多好?

    json - 从位于内存中的 JSON 加载启动配置