CMake自定义命令 - 复制已更改的文件即使不构建目标,只有在更改后才能复制?

时间:2017-05-18 17:24:25

标签: cmake copy

我有一个带有下一个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的完全重复,而是补充它。

2 个答案:

答案 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 ......

另见documentation