2012-11-14 13 views
21

Considerate questo Makefilepredefinito nella Makefile per il collegamento oggetto C++ file

% cat Makefile 
main: main.o add.o 

che utilizza cc invece di g++ di collegare i file oggetto

% 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' 
... 

Come faccio a dire (GNU) Faccia a utilizzare g++ (che collega le librerie C++) anziché cc?

risposta

27

(GNU) Fare è dotato di regole, che è bello, perché è sufficiente a dare le dipendenze senza regole:

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

Tuttavia la regola build-in in questo caso utilizza $(CC) per il collegamento file oggetto .

% 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] 

far realizzare scelto il linker corretto, è sufficiente impostare LINK.o-LINK.cc. Un minimo Makefile può quindi apparire come

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

main: main.o add.o 
Problemi correlati