Ich würde add_custom_command
dies zusammen mit erreichen cmake -E copy_if_different...
. Für vollständige Informationen laufen
cmake --help-command add_custom_command
cmake -E
Also in Ihrem Fall, wenn Sie die folgende Verzeichnisstruktur haben:
/CMakeLists.txt
/src
/libs/test.dll
MyTest
Wenn Ihr CMake-Ziel, für das der Befehl gilt, lautet , können Sie Ihrer CMakeLists.txt Folgendes hinzufügen:
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
Wenn Sie nur den gesamten Inhalt des /libs/
Verzeichnisses kopieren möchten , verwenden Sie 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>)
Wenn Sie je nach Konfiguration unterschiedliche DLLs kopieren müssen (Release, Debug, z. B.), können Sie diese in Unterverzeichnissen mit der entsprechenden Konfiguration haben:, /libs/Release
und /libs/Debug
. Anschließend müssen Sie den Konfigurationstyp add_custom_command
wie folgt in den Pfad zur DLL des Aufrufs einfügen :
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>
für das Ziel verwendet habe. Andernfalls würde es in den Bibliothekserstellungspfad kopiert, was nutzlos war.