2013-02-14 37 views
10

में निष्पादन योग्य लक्ष्यों को अक्षम करने का एक सामान्य तरीका है हमारे सीएमके निर्माण प्रणाली के साथ मैं कुछ पुस्तकालयों और कुछ निष्पादन योग्य बनाता हूं। निर्माण उत्पाद सभी विशिष्ट फ़ोल्डर में आउटपुट होते हैं।क्या cmake

अब समस्या यह है कि मेरे पास वीएस -2010 और वीएस -2008 टूलचेन है लेकिन मुझे केवल वीएस -2008 पुस्तकालयों के लिए वीएस -2008 टूलचैन की आवश्यकता है। आउटपुट निष्पादन योग्य उपकरण दोनों के लिए Win32 लक्ष्य हैं इसलिए मुझे केवल VS2010 टूलचैन के माध्यम से निष्पादन योग्य बनाने की आवश्यकता है जबकि VS2008 टूलचेन को केवल निष्पादन योग्य छोड़ना चाहिए और केवल वांछित पुस्तकालयों (जो निर्माण समय बचाता है) बनाना चाहिए।

सीएमके बेस स्क्रिप्ट और समग्र सेटअप भविष्य में ग्राहकों को भी पहुंचाया जा सकता है, इसलिए यदि सीएमके में कुछ लक्ष्य अक्षम करने के लिए कोई रास्ता है, तो सभी निष्पादन योग्य सामान्य तरीके से अक्षम होना बहुत अच्छा होगा। अन्यथा मुझे कई बड़े IF (BUILD_EXECUTABLES) लिखना होगा ... ENDIF() मेरे CMakeLists.txt में मेरे निष्पादन योग्य सेटअप के आसपास बना है, जब मैं उन्हें भूल जाता हूं तो सीएमके बिना त्रुटियों के मुझे त्रुटि देता है।

बिल्ड कुछ बैच फ़ाइलों के माध्यम से ट्रिगर किया गया है। आदर्श रूप में मैं (उदाहरण के लिए "डी BUILD_EXECUTABLES = false") डी विकल्प के माध्यम से CMake को

मैं ADD_EXECUTABLE मैक्रो लपेटो करने की कोशिश की एक चर पास करना चाहते हैं, लेकिन उस के बाद से मैं TARGET_LINK_LIBRARIES जो तब शिकायत की तरह कॉल कर काम नहीं करता है बिना किसी लक्ष्य के लक्ष्य के बारे में।

मैं भी जो बाद में हटाया जा सकता है कुछ कचरा फ़ोल्डर में उत्पादन निर्देशिका

कोई भी विचार कैसे पूरा करने के लिए सेट कर सकते हैं, लेकिन वह (पहले से ही उल्लेख किया) समय का निर्माण नहीं बचा होगा (हम एक काफी विशाल परियोजना है) कि स्वच्छ और सामान्य तरीके से?

उत्तर

18

सीएमके लक्ष्यों में दो गुण होते हैं जो डिफ़ॉल्ट रूप से लक्षित किए जाने पर नियंत्रित होते हैं। पहला वाला EXCLUDE_FROM_ALL है। यह इंगित करता है कि लक्ष्य को डिफ़ॉल्ट निर्माण लक्ष्य से बाहर रखा गया है या नहीं। Makefile जनरेटर के लिए, make टाइपिंग लक्ष्य जिसका EXCLUDE_FROM_ALL संपत्ति के लिए 1.

एक दूसरे EXCLUDE_FROM_DEFAULT_BUILD है और केवल दृश्य स्टूडियो जनरेटर पर लागू होता है सेट कर दिया जाता का निर्माण ट्रिगर नहीं करेगा। यदि यह 1 पर सेट किया गया है, तो जब आप "समाधान बनाएं" मेनू कमांड का आह्वान करते हैं तो लक्ष्य डिफ़ॉल्ट निर्माण का हिस्सा नहीं होगा।

आप विकल्प BUILD_EXECUTABLES के आधार पर निष्पादन लक्ष्यों के लिए दोनों गुणों के मूल्यों को निर्धारित कर सकते हैं:

if (NOT BUILD_EXECUTABLES) 
    set_target_properties(exe1 exe2 PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1) 
endif() 
+0

शानदार, कि बहुत अच्छी तरह से काम करता है। धन्यवाद। – ecreif