CMake custom命令-即使不';只有当目标发生变化时,才能构建目标?
我有一个带有下一个post_build命令的CMake项目:CMake custom命令-即使不';只有当目标发生变化时,才能构建目标?,cmake,copy,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_js
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"
)
add_custom_命令(目标ncd_json)
后期构建
命令${CMAKE_COMMAND}-E复制
${CMAKE\u CURRENT\u SOURCE\u DIR}/ncd.json
$/ncd.json
注释“将ncd.json复制到二进制文件文件夹”
)
每次生成目标时都会复制ncd.json
。但是我真的需要复制这个文件,只有当它被更改时,并且即使目标已经构建了,这是主要的问题
我认为这个问题不是完全重复的,而是补充的。在写问题时,我找到了一个好答案 还是我的情况
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/ncd.json
${CMAKE_CURRENT_BINARY_DIR}/ncd.json
COPYONLY
)
但我仍然不确定它是否每次都复制ncd.json
另请参见。在写问题时,我找到了一个很好的答案 还是我的情况
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/ncd.json
${CMAKE_CURRENT_BINARY_DIR}/ncd.json
COPYONLY
)
但我仍然不确定它是否每次都复制ncd.json
另请参见。类似于以下内容的操作应尽可能接近您的要求:
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)
add_custom_目标(copyJson ALL
COMMAND${CMAKE_COMMAND}-E copy_如果不同
${CMAKE\u CURRENT\u SOURCE\u DIR}/ncd.json
$/ncd.json
)
添加依赖项(copyJson ncd\U json)
仅当文件不同时,它才会复制该文件;如果目标已生成,它仍会复制该文件。但是,请注意,如果您只要求构建目标本身,它将不会复制。以上依赖于您构建默认目标来复制文件。您可以始终将问题中的方法与上述方法相结合,它对于您想要的案例可能会非常可靠。类似于以下内容的内容应该可以接近您想要的内容:
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)
add_custom_目标(copyJson ALL
COMMAND${CMAKE_COMMAND}-E copy_如果不同
${CMAKE\u CURRENT\u SOURCE\u DIR}/ncd.json
$/ncd.json
)
添加依赖项(copyJson ncd\U json)
仅当文件不同时,它才会复制该文件;如果目标已生成,它仍会复制该文件。但是,请注意,如果您只要求构建目标本身,它将不会复制。以上依赖于您构建默认目标来复制文件。您可以始终将问题中的方法与上述方法相结合,它对于您想要的情况可能非常可靠。configure\u file()
每次都会复制该文件。但是,请注意,此处的代码不一定复制到与问题相同的位置。特别是,如果您使用的是Visual Studio或Xcode生成器,它们将使用特定于配置的生成目录。configure_file()
将每次复制该文件。但是,请注意,此处的代码不一定复制到与问题相同的位置。特别是,如果您使用的是Visual Studio或Xcode生成器,它们将使用特定于配置的生成目录。