Chciałbym add_custom_command
to osiągnąć razem z cmake -E copy_if_different...
. Aby uzyskać pełne informacje uruchom
cmake --help-command add_custom_command
cmake -E
Więc w twoim przypadku, jeśli masz następującą strukturę katalogów:
/CMakeLists.txt
/src
/libs/test.dll
a cel CMake, do którego odnosi się polecenie MyTest
, to możesz dodać do pliku CMakeLists.txt następujące polecenie:
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
Jeśli chcesz tylko /libs/
skopiować całą zawartość katalogu, użyj 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>)
Jeśli chcesz skopiować różne biblioteki DLL w zależności od konfiguracji (np. Release, Debug), możesz mieć je w podkatalogach o nazwach z odpowiednią konfiguracją: /libs/Release
i /libs/Debug
. Następnie musisz wstrzyknąć typ konfiguracji do ścieżki do biblioteki dll w add_custom_command
wywołaniu, na przykład:
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>
jako miejsca docelowego. W przeciwnym razie skopiowałby go do ścieżki budowania biblioteki, co było bezużyteczne.