2013-09-06 5 views
5

मैं सोच रहा हूं कि बाहरी परियोजना की निर्भरताओं का प्रबंधन कैसे करें।सीएमके: बाहरी परियोजना की निर्भरता

  1. कोर: पुस्तकालय उपयोगी सामग्री का एक बहुत निर्यात चलो कहते हैं कि मैं तीन परियोजनाओं, एक अलग भंडार में हर एक को चला रहे हैं।
  2. Lib1: कुछ विशिष्ट वर्गों के साथ पुस्तकालय (कोर पर निर्भर करता है)।
  3. निष्पादन: Lib1 से कोर और यह भी से सामान का उपयोग करता है।

प्रत्येक परियोजना इसके CMakeLists.txt के साथ। find_package का उपयोग करना और CMake पर पथ को परिभाषित मैं समस्याओं के बिना प्रत्येक परियोजना का निर्माण और स्थापित कर सकते हैं (मैं पीछा किया this tuto पुस्तकालयों के लिए फ़ाइलों .cmake निर्माण करने के लिए)


अब मैं संभव के रूप में आसान के रूप में इस प्रक्रिया बनाने के लिए कोशिश कर रहा हूँ और मैं ExternalProject_Add मैक्रो को शुरू कर रहा हूँ, इस तरह से लोगों को केवल होगा क्लोन करने के लिए निष्पादन भंडार और CMake फ़ाइलों की मदद से Lib1 और कोर भी डाउनलोड किया संकलित और जुड़े हुए हैं।

समस्या यह है कि निष्पादन और Lib1कोर पर निर्भर करता है लेकिन मैं इसे क्लोन करने के लिए किया जा (और संकलित) केवल एक बार चाहता हूँ। यहाँ समस्या है:

  • में निष्पादन CMake क्लोन और ExternalProject_Add सुविधाओं के साथ कोर बनाता है।
  • फिर CMake क्लोन Lib1 और कोर के लिए लग रही है लेकिन यह पहले से इंस्टॉल नहीं किया गया है इसलिए कोई कोर-targets.cmake फ़ाइल (कोर-config.cmake उपलब्ध है) है ... और इमारत में विफल रहता है ...

मैं अगर वहाँ परियोजना पेड़ इस तरह से काम करने के लिए एक दस्तावेज तरीका है या मैं वैकल्पिक हल के कुछ प्रकार के बारे में होगा पता नहीं है जब कोर की निर्भरता के रूप में शामिल किया गया है एक बाहरी समर्थक कोर-targets.cmake फ़ाइल के उपयोग से बचने के लिए जेक्ट।

धन्यवाद!


समाधान

मैंने महसूस किया कि यह डाउनलोड करता है, बनाता है और परियोजना इन्सटाल तो स्थापित-फ़ोल्डर में, जब ExternalProject_Add का उपयोग कर, मैं पहले से ही अपने सभी आश्रितों को संकलित करने के लिए आवश्यक फ़ाइलों की है।

  • * ExternalProject_Add * के लिए कोर
  • * ExternalProject_Add * के लिए Lib1 तर्क
  • के रूप में कोर install_dir गुजर:

    तो मैं इस मुद्दे के लिए निम्न चरणों (यह भी निर्माण आदेश के लिए) निम्नलिखित प्रबंधन कर सकते हैं

  • ... और निष्पादन योग्य
+0

दो विकल्प जो मैं देखता हूं: (1) अपने सभी libs और निष्पादन योग्य के लिए एक एकल सीएमके परियोजना बनाएं; (2) 'निष्पादन योग्य' केवल 'लीब 1' पर निर्भर करता है। –

+0

(समाधान के रूप में कॉपी किया गया) मुझे एहसास हुआ कि बाहरी प्रोजेक्ट का उपयोग करते समय इसे डाउनलोड करें, प्रोजेक्ट बनाएं और इंस्टॉल करें, इसलिए इंस्टॉल-फ़ोल्डर में, मेरे पास पहले से ही सभी आश्रितों को संकलित करने के लिए आवश्यक सभी फाइलें हैं। तो मैं इन चरणों (बिल्ड ऑर्डर के लिए भी) के बाद इस समस्या का प्रबंधन कर सकता हूं: * बाहरी प्रोजेक्ट_ कोर * के लिए जोड़ें * बाहरी प्रोजेक्ट_बीबी को पास करने के लिए जोड़ें कोर को तर्क के रूप में स्थापित करें। * ..और निष्पादन योग्य। (प्रश्न में कॉपी) – jgsogo

उत्तर

1

मैं निष्पादन, जो उप-फ़ोल्डर में समाहित किया जाएगा करने के लिए दो सुविधा परियोजनाओं जोड़ सकते हैं और ExternalProject_Add का इस्तेमाल करते हैं जाएगा।

add_subdirectory(CoreWrapper) # Use ExternalProject_Add here 
add_subdirectory(Lib1Wrapper) # Use ExternalProject_Add here 

अब आप या तो निष्पादन के लिए उनकी निर्भरता में जोड़ सकते हैं, ताकि सब कुछ स्थापित हो जाता से पहले निष्पादन बनाने या आपको निर्माण फ़ोल्डर में निहित binaries के साथ सीधे काम है।

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