मैं इसे 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>)
यदि आपको कॉन्फ़िगरेशन (रिलीज़, डीबग, उदा) के आधार पर अलग-अलग डीएल को कॉपी करने की आवश्यकता है, तो आपके पास इन सबडायरेक्टरीज को संबंधित कॉन्फ़िगरेशन के साथ नामित किया जा सकता है: /libs/Release
और /libs/Debug
,। फिर आपको add_custom_command
कॉल में dll के पथ में कॉन्फ़िगरेशन प्रकार को इंजेक्ट करने की आवश्यकता है , जैसे:
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>
लक्ष्य गंतव्य के लिए उपयोग किया । अन्यथा यह इसे लाइब्रेरी बिल्ड पथ पर कॉपी कर देगा, जो बेकार था।