Я б використав 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 в залежності від конфігурації (Release, Debug, наприклад), тоді ви можете мати їх у підкаталогах з іменем відповідної конфігурації:, /libs/Releaseі /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>)
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>цільовий пункт призначення. Інакше він скопіював би його до шляху побудови бібліотеки, що було марно.