ฉันต้องการใช้เพื่อให้บรรลุนี้พร้อมกับ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>สำหรับปลายทางเป้าหมาย มิฉะนั้นจะคัดลอกไปยังเส้นทางการสร้างไลบรารีซึ่งไม่มีประโยชน์