2012-11-14 34 views
21

Xem xét việc này MakefileMặc định mối liên kết thiết lập trong Makefile để liên kết đối tượng C++ file

% cat Makefile 
main: main.o add.o 

trong đó sử dụng cc thay vì g++ để liên kết các tập tin đối tượng

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

Làm thế nào để nói (GNU) Hãy để sử dụng g++ (liên kết các thư viện C++) thay vì cc?

Trả lời

27

(GNU) Hãy chắc đã được xây dựng trong các quy tắc, đó là tốt đẹp, bởi vì nó là đủ để cung cấp cho phụ thuộc mà không quy tắc:

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

Tuy nhiên việc xây dựng trong quy tắc trong trường hợp này sử dụng $(CC) để liên kết các file đối tượng .

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

Để cho Make chọn mối liên kết chính xác, nó là đủ để thiết lập LINK.o-LINK.cc. Do đó, tối thiểu Makefile có thể trông giống như

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

main: main.o add.o 
Các vấn đề liên quan