Skip to main content
 首页 » 编程设计

makefile之Makefile 中用于链接 C++ 目标文件的默认链接器设置

2025年01月19日22emanlee

考虑这个 Makefile

% cat Makefile 
main: main.o add.o 

使用 cc而不是 g++链接目标文件
% 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' 
... 

我如何告诉 (GNU) Make 使用 g++ (链接 C++ 库)而不是 cc ?

请您参考如下方法:

(GNU) Make 有内置规则,这很好,因为它足以提供没有规则的依赖项:

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 $@ 

要让 Make 选择正确的链接器,设置 LINK.o 就足够了。至 LINK.cc .极简 Makefile因此可以看起来像
% cat Makefile 
LINK.o = $(LINK.cc) 
CXXFLAGS=-Wall -pedantic -std=c++0x 
 
main: main.o add.o