ฉันต้องการใช้เพื่อให้บรรลุนี้พร้อมกับadd_custom_command
cmake -E copy_if_different...
สำหรับข้อมูลแบบเต็มเรียกใช้
cmake --help-command add_custom_command
cmake -E
ดังนั้นในกรณีของคุณหากคุณมีโครงสร้างไดเร็กทอรีต่อไปนี้:
/CMakeLists.txt
/src
/libs/test.dll
และเป้าหมาย CMake ของคุณที่ใช้คำสั่งMyTest
จากนั้นคุณสามารถเพิ่มสิ่งต่อไปนี้ใน 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
หากคุณต้องการเพียงแค่/libs/
คัดลอกเนื้อหาทั้งหมดของไดเรกทอรีให้ใช้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>)
หากคุณต้องการคัดลอก dll ที่แตกต่างกันขึ้นอยู่กับการกำหนดค่า (Release, Debug, เช่น) คุณสามารถมีสิ่งเหล่านี้ในไดเรกทอรีย่อยที่ตั้งชื่อด้วยการกำหนดค่าที่เกี่ยวข้อง: /libs/Release
และ/libs/Debug
. จากนั้นคุณต้องฉีดประเภทการกำหนดค่าลงในพา ธ ไปยัง dll ในการ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>
สำหรับปลายทางเป้าหมาย มิฉะนั้นจะคัดลอกไปยังเส้นทางการสร้างไลบรารีซึ่งไม่มีประโยชน์