2010-02-02 7 views
17

मैं जीएनयू बनाने का उपयोग कर रहा हूं, और एक ऐसी परियोजना में तीसरी पार्टी लाइब्रेरी समेत एक बिल्ड सिस्टम है जो CFLAGS को कॉल करने पर पर्यावरण में परिभाषित किया गया है। मुझे अन्य कारणों से मेरे पर्यावरण में CFLAGS परिभाषित करना पसंद है। लाइब्रेरी की निर्माण एक और makefile से लागू किया जा रहा है, ताकि मैं उदाहरण के लिए: कहते हैं कि .:क्या मेकफ़ाइल में एक पर्यावरण चर को "अनसेट" करना संभव है?

3rdparty: $(MAKE) -f Makefile.3rdparty

लेकिन मुझे यकीन है कि CFLAGS सेट नहीं होने पर होना चाहते हैं जब मैं आह्वान 3 पार्टी Makefile पर बनाते हैं। निकटतम बात मैं पा सकते हैं कहने के लिए है:

CFLAGS:=

लेकिन यह अभी भी वातावरण में CFLAGS सेट छोड़ देता है यह सिर्फ एक खाली स्ट्रिंग है। इसके अलावा कह की तरह कुछ घृणित करने से:

3rdparty: bash -c "unset CFLAGS; $(MAKE) -f Makefile.3rdparty"

वहाँ एक आसान तरीका करने के लिए "सेट नहीं" मेरी प्राथमिक makefile के भीतर से CFLAGS चर रहा है, इतना है कि यह सब में मौजूद नहीं है पर्यावरण जब तीसरे पक्ष पुस्तकालय का आह्वान किया जाता है?

उत्तर

23

क्या आपके लिए निम्नलिखित कार्य नहीं है?

unexport CFLAGS 
3rdparty: 
     $(MAKE) -f Makefile.3rdparty 
+0

यह करता है! मुझे "अप्रत्याशित" कीवर्ड के बारे में पता नहीं था, अब मैं करता हूं। धन्यवाद! –

+1

@JayWalker, अगर आप संतुष्ट हैं तो कृपया इस उत्तर को स्वीकार किए गए एक के रूप में चिह्नित करें। –

0

अगर आप चर जरूरत नुस्खा में अन्य आदेश के लिए परिभाषित किया जा करने के लिए और केवल यह submake में परिभाषित नहीं करना चाहती समस्या हो सकती है। एक अन्य समाधान env उपयोग करने के लिए है - submake आह्वान करने के लिए और स्पष्ट रूप से किसी भी वातावरण चर आप submake में सेट की जरूरत है, उदाहरण के लिए सेट करें:

env - PATH="$$PATH" LD_LIBRARY_PATH="$$LD_LIBRARY_PATH" $(MAKE) -f Makefile.3rdparty 
-3

लिनक्स में एक पर्यावरण चर अनसेट करने के लिए।

उपयोग:

export -n MY_ENV_VARIABLE 
0

संस्करण की 3.82 मेकअप एक "undefine" डायरेक्टिव है के रूप में:

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