将文件复制到可执行目录,并在修改后重新复制

时间:2018-11-29 22:10:12

标签: cmake

我正在尝试将文件复制到可执行文件最终所在的目录。这意味着在Visual Studio中包括配置类型“ RelWithDebInfo”目录。任何CMake变量(例如“ CMAKE_BINARY_DIR”等)都不会在路径中包含此文件夹。

add_executable(${PROJECT_NAME} main.cpp)

add_custom_command(
    TARGET ${PROJECT_NAME}
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt copy_this.txt
    COMMENT "Copying..."
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt
)

上面的代码有效,但不会导致文件被复制。我发现的唯一其他解决方案是在使用add_custom_command(OUTPUT copy_this.txt ...)时将文件复制到哪里,但没有将文件复制到正确的文件夹中。

add_custom_command(
    OUTPUT copy_this.txt # this expects the file to be in ${CMAKE_CURRENT_BINARY_DIR}
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt copy_this.txt
    COMMENT "Copying..."
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt
)
add_custom_target(target_copy_this.txt DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt)

add_dependencies(${PROJECT_NAME} target_copy_this.txt)

1 个答案:

答案 0 :(得分:0)

需要对add_custom_command进行更新,以指定将文件复制到何处。在这两个示例中,由于未指定路径,因此文件被复制到当前工作目录中。这是一个如何复制到主目录的示例。

set(newloc ~)

add_custom_command(
    OUTPUT ${newloc}/copy_this.txt
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt ${newloc}/copy_this.txt
    COMMENT "Copying to ${newloc}"
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt
    )

add_custom_target(target_copy_this.txt ALL DEPENDS copy_this.txt)

似乎您希望将文件复制到目标位置之一。在Visual Studio中,根据${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}中发生的其他情况,它可以是${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}CMakeLists.txt

使用此示例并将newloc设置为${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR},您将获得以下输出:

cmake --build . --config RelWithDebInfo

CustomBuild:
Copying to C:/Users/ZZZ/Projects/test/bld/RelWithDebInfo