考虑这个 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