2012-07-09 13 views
30

कोड स्निपेट:मेकफ़ाइल में CXX का मूल्य कहां से आता है?

target_test : test.cc 
    $(CXX) $(CPPFLAGS) $(CFLAGS) test.cc 

मुझे पता है कि CXX एक चर (संकलक आदेश कॉल करने के लिए युक्त) है, लेकिन मैं सोच रहा था, जहां इस चर से आता है। चर को मेकफ़ाइल में परिभाषित नहीं किया गया है और यह पर्यावरण चर नहीं है। क्या कोई बता सकता है कि CXX का मूल्य कहां से आता है?

उत्तर

29

मेक कई predefined variables जो बीच में CC है। प्रारंभ में, यह cc पर सेट है जो स्थापित सी संकलक करने के लिए एक सिमलिंक है:

$ readlink -f `which cc` 
/usr/bin/gcc-4.6 

इसके अलावा:

$ readlink -f `which c++` 
/usr/bin/g++-4.6 

आप इसे बदल सकते हैं अगर आप चाहते हैं।

आप सभी अंतर्निहित नियमों और चरों की सूची प्राप्त करने के लिए make -p -f /dev/null का उपयोग कर सकते हैं। मैं अभी आउटपुट नहीं दिखा सकता क्योंकि मेरे पास एक गैर-मानक इंस्टॉल है और आउटपुट अंग्रेजी में नहीं है।

+3

उदाहरण के लिए: $ make -p -f/dev/null | grep CXX देता है: CXX = g ++ – ady

15

सीआईएफ जीएनयू बनाने में एक निहित चर है। There are others too

न केवल यह, इन निहित चर implicit rules में उपयोग किए जाते हैं।

यहाँ एक उद्धरण कैसे CXX एक अंतर्निहित शासन द्वारा प्रयोग किया जाता है से संबंधित है:

संकलन सी ++ कार्यक्रमों
n.o प्रपत्र की एक नुस्खा साथ n.cc, n.cpp, या n.C से स्वचालित रूप से किया जाता है
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
हम आपको 'सी' के बजाय सी ++ स्रोत फ़ाइलों के लिए प्रत्यय '.cc' का उपयोग करने के लिए प्रोत्साहित करते हैं।

1

किसी को भी व्याख्या कर सकते हैं जहां CXX का मूल्य से आता है?

अन्य "जादू" variabes (LD, RM, MAKE) की तरह, यह मेकअप द्वारा आंतरिक रूप से पूर्व-निर्धारित है।

0

यह एक चर है जो उपयोगकर्ता ओवरराइड कर सकता है और जिसका डिफ़ॉल्ट मान g++ (जीएनयू संस्करण में कम से कम) में है। इसमें कुछ भी नहीं है (यह कुछ फाइल या उस तरह की चीजों में परिभाषित नहीं है)।

स्रोत: The GNU Make Manual

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