使用 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 选项。这是构建后检查的首选方式,因为每次实际(重新)构建目标时都会执行检查。
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/