J'utiliserais add_custom_command
pour y parvenir avec cmake -E copy_if_different...
. Pour des informations complètes, exécutez
cmake --help-command add_custom_command
cmake -E
Donc, dans votre cas, si vous avez la structure de répertoires suivante:
/CMakeLists.txt
/src
/libs/test.dll
et votre cible CMake à laquelle la commande s'applique est MyTest
, alors vous pouvez ajouter ce qui suit à votre 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
Si vous souhaitez simplement /libs/
copier l'intégralité du contenu du répertoire, utilisez 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>)
Si vous avez besoin de copier différentes DLL en fonction de la configuration (Release, Debug, par exemple), vous pouvez les avoir dans des sous-répertoires nommés avec la configuration correspondante:, /libs/Release
et /libs/Debug
. Vous devez ensuite injecter le type de configuration dans le chemin de la dll dans l' add_custom_command
appel, comme ceci:
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>
pour la destination cible. Sinon, il le copierait dans le chemin de construction de la bibliothèque, ce qui était inutile.