2012-11-14 12 views
21

पर विचार करें इस Makefileडिफ़ॉल्ट लिंकर सेटिंग

% cat Makefile 
main: main.o add.o 

वस्तु फ़ाइलों से जोड़ने के लिए g++ के बजाय cc का उपयोग करता है जो

% make 
g++ -Wall -pedantic -std=c++0x -c -o main.o main.cpp 
g++ -Wall -pedantic -std=c++0x -c -o add.o add.cpp 
cc main.o add.o -o main 
main.o:main.cpp:(.text+0x40): undefined reference to `std::cout' 
... 

मैं कैसे बताऊँ (जीएनयू) करने के लिए सुनिश्चित करें g++ (जो सी ++ पुस्तकालयों को लिंक करता है) cc के बजाय उपयोग करें?

उत्तर

27

(जीएनयू), बिल्ट-इन नियमों, जो अच्छा है है बनाने क्योंकि यह नियम के बिना निर्भरता देने के लिए पर्याप्त है:

main: main.o add.o 
    # no rule, therefore use built-in rule 

हालांकि इस मामले में निर्माण में शासन वस्तु फ़ाइलों को जोड़ने के लिए $(CC) का उपयोग करता है ।

% make -p -f/dev/null 
... 
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH) 
... 
LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) 
... 
%: %.o 
# recipe to execute (built-in): 
     $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o [email protected] 

करते हैं करने के लिए सही लिंकर चुना है, यह LINK.cc को LINK.o स्थापित करने के लिए पर्याप्त है। इसलिए कम से कम Makefile

% cat Makefile 
LINK.o = $(LINK.cc) 
CXXFLAGS=-Wall -pedantic -std=c++0x 

main: main.o add.o 
जैसा दिख सकता है
संबंधित मुद्दे