Я б використав 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>
цільовий пункт призначення. Інакше він скопіював би його до шляху побудови бібліотеки, що було марно.