Bunu add_custom_command
başarmak için kullanırdım cmake -E copy_if_different...
. Tam bilgi için çalıştırın
cmake --help-command add_custom_command
cmake -E
Yani sizin durumunuzda, aşağıdaki dizin yapısına sahipseniz:
/CMakeLists.txt
/src
/libs/test.dll
ve komutun uygulandığı CMake hedefiniz ise MyTest
, CMakeLists.txt dosyanıza aşağıdakileri ekleyebilirsiniz:
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
Sadece /libs/
dizinin tüm içeriğinin kopyalanmasını istiyorsanız , şunu kullanın 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>)
Yapılandırmaya bağlı olarak farklı dll'leri kopyalamanız gerekiyorsa (Sürüm, Hata Ayıklama, örn.), Bunları ilgili yapılandırma ile adlandırılan alt dizinlerde bulundurabilirsiniz: /libs/Release
ve /libs/Debug
. Daha sonra konfigürasyon tipini çağrıdaki dll yoluna şu şekilde enjekte etmeniz gerekir 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>
hedef hedef için kullandım . Aksi takdirde, işe yaramaz olan kütüphane oluşturma yoluna kopyalar.