Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake custom命令-即使不';只有当目标发生变化时,才能构建目标?_Cmake_Copy - Fatal编程技术网

CMake custom命令-即使不';只有当目标发生变化时,才能构建目标?

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

我有一个带有下一个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"
                   )
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生成器,它们将使用特定于配置的生成目录。