2013-03-29 8 views
11

के साथ अतिरिक्त फ़ाइलों को स्थापित करना मैं कुछ निष्पादन योग्यताओं के साथ कुछ "स्रोत" फ़ाइलों को आपूर्ति करने का प्रयास कर रहा हूं। मैं सोच रहा था कि क्या इन स्रोत फ़ाइलों को बिल्ड निर्देशिका (स्रोत निर्देशिका से) पर कॉपी करने का कोई तरीका था, फिर cmake का उपयोग कर स्थापित निर्देशिका में।सीएमके

मेरा अधिक विशिष्ट लक्ष्य यहां ओपनसीएल कर्नल शामिल करना है जो मैं अपनी * .cl फ़ाइलों में लिखता हूं।

उदाहरण:

mkdir build 
cd build 
cmake .. 
make 

अब मेरी निर्देशिका एक निष्पादन योग्य (मानक cmake) और some_opencl_kernel.cl जो मैं अपने निष्पादन में खुला होना चाहिए। TIA

उत्तर

12

आप की तरह निम्नलिखित कुछ जोड़कर अपने निर्माण पेड़ add_custom_command उपयोग करने के लिए फाइल कॉपी कर सकते हैं:

add_custom_command(TARGET MyExe POST_BUILD 
        COMMAND ${CMAKE_COMMAND} -E copy_if_different 
         ${CMAKE_CURRENT_SOURCE_DIR}/src/some_opencl_kernel.cl 
         $<TARGET_FILE_DIR:MyExe> 
        ) 

यह आपकी लक्षित करने के लिए एक के बाद निर्माण घटना कहते हैं जो प्रतियां (मैं इसे MyExe कहा जाता है) फ़ाइल src/some_opencl_kernel.cl आपके निर्माण पेड़ में एक ही निर्देशिका में आपके exe के रूप में।

बिल्ड पेड़ में फ़ाइल की प्रतिलिपि बनाने के कई अन्य तरीके हैं, लेकिन मुझे यह पसंद है क्योंकि यह "जनरेटर अभिव्यक्ति" $<TARGET_FILE_DIR:MyExe> का उपयोग करता है ताकि बिल्ड पेड़ में exe की निर्देशिका के स्थान की पहचान हो सके। यह उदाहरण के आधार पर भिन्न हो सकता है बिल्ड-टाइप या प्लेटफ़ॉर्म, इसलिए जनरेटर अभिव्यक्ति मुझे लगता है कि इस स्थान को निर्दिष्ट करने का सबसे विश्वसनीय, क्रॉस-प्लेटफार्म तरीका है।

इंस्टॉल करने के लिए, आप बस install(FILES ...) कमांड का उपयोग कर सकते हैं।

install(FILES src/some_opencl_kernel.cl DESTINATION bin) 

जो exe के साथ ${CMAKE_INSTALL_PREFIX}/bin/some_opencl_kernel.cl करने के लिए इसे स्थापित हो जाएगा: अपने exe के लिए मान लिया जाये कि आप की तरह

install(TARGETS MyExe RUNTIME DESTINATION bin) 

कुछ तुम सिर्फ जोड़ सकते हैं की है।

+0

फ्रेजर मैं वास्तव में सराहना करते हैं यह, मैं सोच रहा था निकाल दें यदि आपके पास 'कॉन्फ़िगरेशन' के साथ 'config_file' का उपयोग करने पर कोई विचार था? – Constantin

+0

यह भी काम करता है और सबसे आसान विकल्प है यदि आप निर्माण डीआईआर की प्रतिलिपि नहीं बना रहे हैं जहां exes/libs लगाए जा रहे हैं, या यदि वह डीआईआर तय है। उदाहरण के लिए, एमएसवीसी डीबग बिल्ड के लिए ['RUNTIME_OUTPUT_DIRECTORY'] (http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:RUNTIME_OUTPUT_DIRECTORY) में" डीबग "डीआईआर जोड़ता है। यदि आप कभी भी बहु-कॉन्फ़िगरेशन जनरेटर का उपयोग नहीं कर रहे हैं, तो यह शायद आपके लिए कोई समस्या नहीं है, और 'config_file' एक आसान विकल्प होगा। – Fraser

8

आप फ़ाइलों को किसी प्रकार की सुविधा के साथ फ़ोल्डर पेड़ कॉपी करना चाहते हैं:

# Copy all assets to resources file 
    INSTALL(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/assets/ DESTINATION ${INSTALL_PATH}/assets 
      FILES_MATCHING PATTERN "*.dae" PATTERN "*.jpg") 

आप फ़ोल्डर में सभी फ़ाइलों की प्रतिलिपि बनाने के लिए, बस FILES_MATCHING पैटर्न