Saya akan menggunakan add_custom_command
untuk mencapai ini bersama cmake -E copy_if_different...
. Untuk menjalankan info lengkap
cmake --help-command add_custom_command
cmake -E
Jadi dalam kasus Anda, jika Anda memiliki struktur direktori berikut:
/CMakeLists.txt
/src
/libs/test.dll
dan target CMake Anda yang menerapkan perintah ini MyTest
, Anda dapat menambahkan yang berikut ini ke 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
Jika Anda hanya ingin seluruh konten /libs/
direktori disalin, gunakan 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>)
Jika Anda perlu menyalin dll yang berbeda tergantung pada konfigurasinya (Rilis, Debug, misalnya) maka Anda dapat memilikinya di subdirektori yang diberi nama dengan konfigurasi yang sesuai:, /libs/Release
dan /libs/Debug
. Anda kemudian perlu memasukkan jenis konfigurasi ke jalur ke dll dalam add_custom_command
panggilan, seperti ini:
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>
untuk tujuan target. Jika tidak, itu akan menyalinnya ke jalur build perpustakaan, yang tidak berguna.