I'd use add_custom_command
为了实现这一目标cmake -E copy_if_different...
。完整信息运行
cmake --help-command add_custom_command
cmake -E
因此,在您的情况下,如果您具有以下目录结构:
/CMakeLists.txt
/src
/libs/test.dll
该命令适用的 CMake 目标是MyTest
,然后您可以将以下内容添加到 CMakeLists.txt 中:
add_custom_command(TARGET MyTest POST_BUILD # Adds a post-build event to MyTest
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..."
"${PROJECT_SOURCE_DIR}/libs/test.dll" # <--this is in-file
$<TARGET_FILE_DIR:MyTest>) # <--this is out-file path
如果您只想要完整的内容/libs/
复制目录,使用cmake -E copy_directory
:
add_custom_command(TARGET MyTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${PROJECT_SOURCE_DIR}/libs"
$<TARGET_FILE_DIR:MyTest>)
如果您需要根据配置(例如发布、调试)复制不同的 dll,那么您可以将它们放在使用相应配置命名的子目录中:/libs/Release
, and /libs/Debug
。然后,您需要将配置类型注入到dll中的路径中add_custom_command
调用,像这样:
add_custom_command(TARGET MyTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${PROJECT_SOURCE_DIR}/libs/$<CONFIGURATION>"
$<TARGET_FILE_DIR:MyTest>)