bjam

2010-04-26 11 views
5

में एक नया संस्करण बनाने का तरीका मैंने दस्तावेज़ों को पढ़ने का प्रयास किया है, लेकिन यह अपेक्षाकृत अभेद्य है इसलिए मुझे आशा है कि किसी के पास कोई साधारण जवाब हो। मैं 'डीबग' के आधार पर एक नया 'संस्करण' परिभाषित करना चाहता हूं, जो कि कंपाइलर कमांड लाइन, जैसे "-DSOMEMACRO" में कुछ मैक्रो परिभाषाओं को जोड़ता है। मुझे लगता है कि मैं इसे डीबग के "सब-वेरिएंट" के रूप में करने में सक्षम हो सकता हूं, या फिर बस एक नया संस्करण 'डीबग' की प्रतिलिपि बना सकता हूं, लेकिन मुझे यह भी सुनिश्चित नहीं है कि यह कहां करें। ऐसा लगता है कि $ BOOST_BUILD_DIR/सुविधा में सुविधा.जैम जगह हो सकती है। शायद मैं वास्तव में एक नया 'फीचर' चाहता हूं लेकिन यह अभी भी मुझे स्पष्ट नहीं है कि मुझे क्या करना है और कहां है, और मुझे नहीं पता कि 'फीचर' मुझे बिल्ड उत्पादों को एक अलग निर्देशिका में निर्देशित करने की अनुमति देता है या नहीं 'डीबग' निर्माण के लिए।bjam

किसी भी सुझाव की सराहना की जाएगी। (यदि आप सोच रहे हैं, तो मुझे बीजेएम का उपयोग करना होगा क्योंकि इसे हमारे कॉर्पोरेट मानक के रूप में अपनाया गया है।)

उत्तर

7

मुझे पूरा यकीन नहीं है कि आप क्या चाहते हैं, लेकिन कई संभावनाएं हैं।

ए आप हमेशा SOMEMACRO मैक्रो परिभाषित करना चाहते हैं। जो मामले में, Jamfile में अपनी परियोजना के लिए जोड़ने

project 
    : requirements # These are requirements for this project 
     # If compiling debug, define SOMEMACRO 
     <variant>debug:<define>SOMEMACRO 
    : usage-requirements 
     # These are requirements projects using this project must have 
     <variant>debug:<define>SOMEMACRO 
    ; 

आप की जरूरत SOMEMACRO हमेशा परिभाषित हैं, तो आप <variant>debug: हालत निकाल सकते हैं। यदि आपको अन्य झंडे सेट करने की आवश्यकता है तो आप <cflags>, <cxxflags>, और उपयुक्त के रूप में उपयोग कर सकते हैं।

बी। आप अपने झंडे/परिभाषित करने के लिए एक त्वरित स्विच चाहते हैं, शायद डिफ़ॉल्ट रूप से, शायद नहीं, और इसके साथ निर्मित इसके साथ निर्माण के साथ संगत नहीं हैं। इस मामले में आप एक सुविधा चाहते हैं।

import feature ; 
feature.feature steves-feature : off on 
    : composite propagated link-incompatible ; 
feature.compose <steves-feature>on : <define>SOMEMACRO ; 

feature.feature नियम एक विशेषता दो संभावित मान और तीन गुणों के साथ <steves-feature> बुलाया परिभाषित करता है। composite का अर्थ यह है कि यह अन्य सुविधाओं से बना एक विशेषता है (इस मामले में <define>SOMEMACRO)। propagated का अर्थ है कि इस सुविधा सेट के साथ एक लक्ष्य शामिल करने वाले किसी भी लक्ष्य में यह सुविधा सेट भी होगी। और link-incompatible का अर्थ है <steves-feature>on के साथ लक्ष्य <steves-feature>off के साथ लक्ष्यों के साथ संयुक्त नहीं किए जा सकते हैं। (नतीजतन, bjam steves-feature-on या steves-feature-off नामित इस सुविधा किसी भी लक्ष्य से सेट है, तो एक निर्देशिका के अंतर्गत बनाई गई फ़ाइलों डाल देंगे।)

यह सुविधा जैसे ऊपर में परियोजना शासन में प्रयोग किया जाता <define> सुविधा का उपयोग किया जा सकता है अनुभाग। (आप इसे परियोजना नियम के default-build अनुभाग में भी जोड़ सकते हैं।)

ध्यान दें कि आप कमांड लाइन से bjam steves-feature=on भी सेट कर सकते हैं।

सी। आप एक पूर्ण संस्करण चाहते हैं। मुझे लगता है कि विचार यह है कि यदि आपके पास अलग-अलग सुविधाओं के समूह के साथ कुछ सामान्य बिल्ड कॉन्फ़िगरेशन हैं जो एक साथ सेट किए जाने चाहिए। खैर, अगर आपने पहले से ही सुविधा बनाई है, तो यह अब आसान है।

variant steves-debug : debug : <steves-feature>on ; 

इस प्रकार debug उपादानों के रूप में लेकिन अतिरिक्त सुविधा <steves-feature>on के साथ एक ही हो जाएगा।

मैंने कभी भी variant नियम का उपयोग नहीं किया है, इसलिए इसे कहीं से आयात करने की आवश्यकता हो सकती है।इसके अलावा, आप

variant steves-debug : debug : <define>SOMEMACRO ; 

लेकिन मुझे नहीं पता कि bjam निर्देशिका संरचना बनायेगा या नहीं। (यह शायद होगा।)

+0

धन्यवाद, मामला बी या शायद सी जो मैं ढूंढ रहा हूं, मैं बी को पहले कोशिश करूँगा क्योंकि यह सबसे आसान है। एक बहुत विस्तृत स्पष्टीकरण के लिए धन्यवाद। –

+0

यदि यह काम करता है, तो आपको उत्तर के बगल में स्थित चेक मार्क पर क्लिक करना चाहिए जैसा कि उत्तर दिया गया है। इस तरह अन्य जानते हैं कि प्रश्न का उत्तर दिया गया है। और मुझे कुछ क्रेडिट मिलता है। :-) (आपने अपने पिछले प्रश्नों पर भी स्वीकार्य उत्तर नहीं दिए हैं।) – AFoglia

+0

क्षमाप्रार्थी, मैंने अब इसे चुना है, मैं अभी भी प्रोटोकॉल में उपयोग कर रहा हूं। –

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