Userei add_custom_command
per raggiungere questo obiettivo insieme a cmake -E copy_if_different...
. Per informazioni complete corri
cmake --help-command add_custom_command
cmake -E
Quindi nel tuo caso, se hai la seguente struttura di directory:
/CMakeLists.txt
/src
/libs/test.dll
e il tuo obiettivo CMake a cui si applica il comando è MyTest
, quindi potresti aggiungere quanto segue al tuo 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
Se vuoi solo /libs/
copiare l'intero contenuto della directory, usa 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>)
Se è necessario copiare diverse DLL a seconda della configurazione (Release, Debug, ad esempio), è possibile averle in sottodirectory denominate con la configurazione corrispondente:, /libs/Release
e /libs/Debug
. È quindi necessario inserire il tipo di configurazione nel percorso della dll nella add_custom_command
chiamata, in questo modo:
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>
per la destinazione di destinazione. Altrimenti lo copierebbe nel percorso di creazione della libreria, che era inutile.