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

Mic*_*ann 23 makefile

考虑一下 Makefile

% cat Makefile
main: main.o add.o
Run Code Online (Sandbox Code Playgroud)

它使用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'
...
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ann 32

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

main: main.o add.o
    # no rule, therefore use built-in rule
Run Code Online (Sandbox Code Playgroud)

但是,此情况下的内置规则$(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 $@
Run Code Online (Sandbox Code Playgroud)

要让Make选择正确的链接器,设置LINK.o为就足够了LINK.cc.Makefile因此,最小可以看起来像

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

main: main.o add.o
Run Code Online (Sandbox Code Playgroud)