2012-11-14 12 views
21

bu nesne dosyalarını bağlamak için cc yerine g++ kullanımlarını MakefileStandart bağlayıcı ayar

% cat Makefile 
main: main.o add.o 

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

anlarım nasıl (GNU) olun düşünün cc yerine g++ (C++ kitaplıklarını bağlar) kullanın? o kurallar olmadan bağımlılıkları vermek için yeterli olduğu için

cevap

27

(GNU), yerleşik güzel kurallar, Make: Bu durumda yap-kural nesne dosyalarını bağlamak için $(CC) kullandığı Ancak

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

. Hale getirmem için

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

doğru bağlayıcı seçti, LINK.cc için LINK.o ayarlamak için yeterlidir. En az Makefile, bu nedenle

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

main: main.o add.o 
gibi görünebilir.