2013-07-05 9 views
5

तो, वहाँ CMake क्रम (file(COPY ...), configure_file(...) और add_custom_command() सब काम *) पर फ़ाइलें (और निर्देशिका) कॉपी करने के लिए कई तरीके हैं, लेकिन मैं अभी तक बाहर नहीं मिला है कैसे बनाने के लिए स्रोत से निर्माण निर्देशिका में कॉपी की गई फ़ाइल या निर्देशिका CPACK द्वारा जेनरेट किए गए संग्रह में दिखाई देती है। मैं यह है कि this SO answer, इसे ठीक कर के रूप में यह वास्तव में एक लक्ष्य है जो फिर एक जो इससे जुड़े स्थापित करना होगा करने के लिए नकल लिंक:फ़ाइलों की प्रतिलिपि और उन्हें एक CPack संग्रह में शामिल हैं

install(TARGET mytarget DESTINATION bin) 

जबकि मैं पहचाना कि file() और configure_file() आदेशों एक स्पष्ट की जरूरत नहीं है एक लक्ष्य में जोड़ने के लिए रास्ता। लेकिन, यह काम नहीं किया। इसलिए, एक सरल CMakeLists.txt दिया गया है, जैसे नीचे दिया गया है, मैं संग्रह में दिखाई देने वाली सभी फ़ाइलों (exmaple निर्देशिका सहित) कैसे बना सकता हूं ?!

cmake_minimum_required(VERSION 2.6 FATAL_ERROR) 
enable_language(FORTRAN) 
add_executable(mytarget ${PROJECT_SOURCE_DIR}/myprog.for) 
install(TARGETS mytarget DESTINATION bin) 

add_custom_command(TARGET mytarget PREBUILD 
       COMMAND ${CMAKE_COMMAND} -E copy_directory 
        ${PROJECT_SOURCE_DIR}/examplefiles ${PROJECT_BINARY_DIR}/examplefiles) 

set(CPACK_GENERATOR "TGZ") 
include(CPack) 

* मैं अभी तक बाहर नहीं मिला है जो इन 3 तरीकों में से एक वास्तव में है (सबसे?) सही - तो भी बेहद सराहना की जाएगी

+0

यह बाइनरी वितरण के बजाय * स्रोत पैकेज * के लिए कैसे काम करेगा? सीपीएसी स्रोत पैकेज जेनरेटर इसकी कॉन्फ़िगरेशन में सीमित है। – kynan

उत्तर

7

के रूप में इस पर किसी भी सलाह की documentation में विस्तार से बताया सीपीएक्स मॉड्यूल, सीपीएसी द्वारा बनाए गए द्विआधारी इंस्टॉलर में सीएमके के INSTALL कमांड के माध्यम से स्थापित सबकुछ शामिल है। इस प्रकार आपके उदाहरण में निष्पादन योग्य mytarget को सीपीएसी संग्रह में शामिल किया जाएगा, क्योंकि आप इसे install कमांड का उपयोग bin फ़ोल्डर में कॉपी करने के लिए करते हैं।

भी CPack करवाने के लिए उत्पन्न संग्रह में example फ़ोल्डर में शामिल हैं, तो आप निम्नलिखित तरीके से install command की DIRECTORY भिन्न रूप का उपयोग कर सकते हैं:

install(DIRECTORY "${PROJECT_SOURCE_DIR}/examplefiles/" DESTINATION "example") 

file(COPY ...) और configure_file(...) है क्या पर असर नहीं है सीपीएसी द्वारा स्थापित दोनों कमांड आमतौर पर सीएमके परियोजना को कॉन्फ़िगर करने के बाद स्रोत पेड़ से बाइनरी पेड़ में फ़ाइलों की प्रतिलिपि बनाने के लिए उपयोग किए जाते हैं।

add_custom_command${CMAKE_COMMAND} -E copy_directory ... के साथ प्रोजेक्ट के निर्माण समय में फ़ाइलों की वास्तविक प्रतिलिपि स्थगित कर देगा। हालांकि, यह सीपीएक्स संग्रह में कॉपी की गई फ़ाइलों को शामिल करने को ट्रिगर नहीं करेगा।

+0

'इंस्टॉल (निर्देशिका ... 'पूरी तरह से धन्यवाद काम किया – ChrisW

संबंधित मुद्दे