我正在尝试将文件复制到可执行文件最终所在的目录。这意味着在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)
答案 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