我有一个带有下一个post_build命令的CMake项目:
add_custom_command(TARGET ncd_json
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/ncd.json
$<TARGET_FILE_DIR:ncd_json>/ncd.json
COMMENT "Copy ncd.json into binaries folder"
)
每次目标构建时都会复制 ncd.json
。但我真的只需要在更改时复制此文件,并且即使已经构建了目标,这也是主要问题。
我认为这个问题不是CMake copy if original file changed的完全重复,而是补充它。
答案 0 :(得分:2)
以下内容应该接近你想要的东西:
add_custom_target(copyJson ALL
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/ncd.json
$<TARGET_FILE_DIR:ncd_json>/ncd.json
)
add_dependencies(copyJson ncd_json)
如果文件不同,它只会复制文件,如果目标已经构建,它仍会复制。但请注意,如果您只要求构建目标本身,则不会复制。以上内容依赖于您构建默认目标以获取复制的文件。您总是可以将问题中的方法与上述方法结合起来,对于您想要的案例,它可能会很健壮。
答案 1 :(得分:0)
在撰写问题时,我找到了一个很好的答案here
configure_file(input_file output_file COPYONLY)
或在我的情况下
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/ncd.json
${CMAKE_CURRENT_BINARY_DIR}/ncd.json
COPYONLY
)
但我仍然不确定它是否每次复制ncd.json
......