2012-07-18 36 views
5

में लाइब्रेरी निर्भरता से हेडर शामिल हैं, मैं सी ++ रिपोजिटरी के लिए सीएमके के साथ थोड़ा सा प्रयोग कर रहा हूं, लेकिन मैं बिना किसी स्रोत पेड़ में पुस्तकालयों के खिलाफ अनुप्रयोगों को बनाने में आसान बनाने की कोशिश करने में कुछ परेशानी कर रहा हूं अतिरिक्त सीएमके कोड का।में आसानी से सेमेक

ROOT 
    libs/ 
     lib1/ 
     lib2/ 
     lib3/ 
    apps/ 
     app1/ 
     app2/ 
     app3/ 

पुस्तकालयों एक दूसरे से स्वतंत्र हैं, और अनुप्रयोग एक या पुस्तकालयों में से अधिक के खिलाफ लिंक कर सकते हैं:

स्रोत पेड़ के लेआउट मूल रूप से पीछा कर रहा है।

वर्तमान में मेरे पास एक रूट CMakeLists.txt है जो प्रत्येक एप्लिकेशन और लाइब्रेरी को एक उपनिर्देशिका के रूप में सूचीबद्ध करता है ताकि यदि पुस्तकालय बदल दिया गया हो और एप्लिकेशन का पुनर्निर्माण किया गया हो, तो लाइब्रेरी भी है। यह ठीक काम करता है और सीएमके मुझे यह निर्दिष्ट करने के बिना लिंक करता है कि पुस्तकालय कहाँ रहता है, लेकिन मुझे निर्देशिकाओं को शामिल करने के लिए कुछ ऐसा करने का कोई तरीका नहीं दिखता है।

क्या इसे संभालने का कोई आम तरीका है? मैं प्रत्येक एप्लिकेशन के CMakeLists.txt को अपने पुस्तकालयों के लिए मैन्युअल रूप से पथ को सूचीबद्ध नहीं करना चाहता हूं।

उत्तर

1

यदि आप वास्तव में प्रत्येक एप्लिकेशन के लिए आवश्यक हेडर उपलब्ध कराने से डरते नहीं हैं, तो आप सभी lib निर्देशिकाओं को एक INCLUDE_DIRECTORIES कथन में सूचीबद्ध कर सकते हैं उदा। CMakeListst.txt में सभी एप्लिकेशन sublists जोड़ना। लेकिन "संबंधित" के प्रबंधन की ऐसी कोई अवधारणा नहीं है जिसमें अंतर्निहित लक्ष्य प्रति फ़ोल्डर शामिल हैं।