2010-09-22 5 views
45

मैं अपने स्रोत पेड़ में कई तृतीय-पक्ष पुस्तकालयों को शामिल करने की कोशिश कर रहा हूं जिसमें उन्नयन की आसानी के लिए उनके निर्माण प्रणाली में न्यूनतम परिवर्तन शामिल हैं। वे सभी सीएमके का उपयोग करते हैं, जैसा कि मैं करता हूं, इसलिए अपने स्वयं के CMakeLists.txt में मैं libfoo के लिए add_subdirectory(extern/foo) का उपयोग कर सकता हूं।माता-पिता से सीएमके में एक डिफ़ॉल्ट विकल्प (...) मान को ओवरराइड करना CMakeLists.txt

लेकिन foo CMakeLists.txt एक परीक्षण दोहन संकलित करता है, दस्तावेज बनाता है, एक साझा लाइब्रेरी जिसे मुझे आवश्यकता नहीं है, और इसी तरह। Libfoo लेखकों के पास विकल्प के माध्यम से इन्हें नियंत्रित करने के लिए दूरदर्शिता थी - उदाहरण के लिए option(FOO_BUILD_SHARED "Build libfoo shared library" ON) - जिसका अर्थ है कि मैं उन्हें सीएमके कमांड लाइन के माध्यम से सेट कर सकता हूं। लेकिन मैं कमांड लाइन के माध्यम से डिफ़ॉल्ट रूप से इसे ओवरराइड करना चाहता हूं।

मैंने से पहले set(FOO_BUILD_SHARED OFF) करने का प्रयास किया है। इसका दूसरा और बाद के निर्माण प्रयासों के दौरान साझा लाइब्रेरी बनाने की कोशिश नहीं करने का असर पड़ता है, लेकिन पहले के दौरान नहीं, जिसे मुझे वास्तव में तेज़ करने की आवश्यकता है।

क्या यह संभव है, या मुझे इन परियोजनाओं के लिए फोर्क किए गए CMakeLists.txt को बनाए रखने की आवश्यकता है?

उत्तर

55

कैश में चर की स्थापना

SET(FOO_BUILD_SHARED OFF CACHE BOOL "Build libfoo shared library") 

नोट का प्रयास करें: तुम इतनी CMake कैसे जीयूआई में इस प्रविष्टि प्रदर्शित करने के लिए जानता है चर प्रकार और वर्णन निर्दिष्ट करने के लिए की जरूरत है।

+7

इसे add_subdirectory कमांड से पहले रखें, इसलिए यह चर के लिए डिफ़ॉल्ट मान सेट करेगा। – tibur

+4

कभी-कभी आपको 'FORCE' – Rajish

+1

प्रो टिप (स्वयं को) का उपयोग करने की आवश्यकता होती है: 'फोर्स' डॉक स्ट्रिंग के बाद चला जाता है, यादृच्छिक रूप से मध्य में नहीं ... – Claudiu

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