指定备用编译器和链接器以生成

时间:2015-08-20 15:24:02

标签: c++ gcc makefile

我有一个默认的C / C ++工具集(gcc 4.8),并且最近在自己的目录中构建并安装了5.2。我想使用makefile构建一些C ++程序,该makefile使用CC和CXX明确编译,但使用隐式内置规则链接.o文件来构建可执行文件。

当我在makefile上运行make时,我使用命令

make all CC=/usr/gcc-5.2.0/bin/gcc-5.2.0 CXX=/usr/gcc-5.2.0/bin/g++-5.2.0

编译步骤全部使用5.2编译器,但是当构建可执行文件时,默认的g ++用于链接所有内容。现在,这恰好工作,结果运行,但它不是我想要的。我尝试添加

LD=/usr/gcc-5.2.0/bin/g++-5.2.0

到make命令行但忽略LD。在不更改makefile的情况下,如何获得使用5.2编译器的链接步骤?

这是make文件:

CPPFLAGS = -Wall
LDFLAGS = -lstdc++
CXX = g++
CC = g++

all: TestSHA3 HashSHA3 HashZeroBytes LongTest sha3sum

debug: override CPPFLAGS += -ggdb
debug: all

SHA3-o3:
        $(CXX) $(CPPFLAGS) -O3 -c -o SHA3.o SHA3.cpp
o3:  SHA3-o3 all

TestSHA3: TestSHA3.o SHA3.o
HashSHA3: HashSHA3.o SHA3.o
HashZeroBytes: HashZeroBytes.o SHA3.o
LongTest: LongTest.o SHA3.o
sha3sum: sha3sum.o SHA3.o

.PHONY: clean realclean rc debug all o3 SHA3-o3
clean:
        rm SHA3.o TestSHA3.o HashSHA3.o HashZeroBytes.o LongTest.o sha3sum.o
rc: realclean
realclean: clean
        rm TestSHA3 HashSHA3 HashZeroBytes LongTest sha3sum

这是命令:

 make all CXX=g++-5.2.0 LD=g++-5.2.0

以下是make的结果:

g++-5.2.0  -Wall  -c -o TestSHA3.o TestSHA3.cpp
g++-5.2.0  -Wall  -c -o SHA3.o SHA3.cpp
g++ -lstdc++  TestSHA3.o SHA3.o   -o TestSHA3
g++-5.2.0  -Wall  -c -o HashSHA3.o HashSHA3.cpp
g++ -lstdc++  HashSHA3.o SHA3.o   -o HashSHA3
g++-5.2.0  -Wall  -c -o HashZeroBytes.o HashZeroBytes.cpp
g++ -lstdc++  HashZeroBytes.o SHA3.o   -o HashZeroBytes
g++-5.2.0  -Wall  -c -o LongTest.o LongTest.cpp
g++ -lstdc++  LongTest.o SHA3.o   -o LongTest
g++-5.2.0  -Wall  -c -o sha3sum.o sha3sum.cpp
g++ -lstdc++  sha3sum.o SHA3.o   -o sha3sum

1 个答案:

答案 0 :(得分:0)

使用:

make all CXX=g++-5.2.0 CC=g++-5.2.0

链接的隐式规则使用CCmake manual):

  

n通过运行链接器(通常称为n)从n.o自动生成   ld)通过C编译器。使用的精确配方是'$(CC)$(LDFLAGS)   n.o $(LOADLIBES)$(LDLIBS)'。

使用您的Makefile和虚拟源文件:

$ make all CXX=`which g++`
/usr/bin/g++  -Wall  -c -o TestSHA3.o TestSHA3.cpp
/usr/bin/g++  -Wall  -c -o SHA3.o SHA3.cpp
g++ -lstdc++  TestSHA3.o SHA3.o   -o TestSHA3
/usr/bin/g++  -Wall  -c -o HashSHA3.o HashSHA3.cpp
g++ -lstdc++  HashSHA3.o SHA3.o   -o HashSHA3
/usr/bin/g++  -Wall  -c -o HashZeroBytes.o HashZeroBytes.cpp
g++ -lstdc++  HashZeroBytes.o SHA3.o   -o HashZeroBytes
/usr/bin/g++  -Wall  -c -o LongTest.o LongTest.cpp
g++ -lstdc++  LongTest.o SHA3.o   -o LongTest
/usr/bin/g++  -Wall  -c -o sha3sum.o sha3sum.cpp
g++ -lstdc++  sha3sum.o SHA3.o   -o sha3sum

$ make all CC=`which g++`
g++  -Wall  -c -o TestSHA3.o TestSHA3.cpp
g++  -Wall  -c -o SHA3.o SHA3.cpp
/usr/bin/g++ -lstdc++  TestSHA3.o SHA3.o   -o TestSHA3
g++  -Wall  -c -o HashSHA3.o HashSHA3.cpp
/usr/bin/g++ -lstdc++  HashSHA3.o SHA3.o   -o HashSHA3
g++  -Wall  -c -o HashZeroBytes.o HashZeroBytes.cpp
/usr/bin/g++ -lstdc++  HashZeroBytes.o SHA3.o   -o HashZeroBytes
g++  -Wall  -c -o LongTest.o LongTest.cpp
/usr/bin/g++ -lstdc++  LongTest.o SHA3.o   -o LongTest
g++  -Wall  -c -o sha3sum.o sha3sum.cpp
/usr/bin/g++ -lstdc++  sha3sum.o SHA3.o   -o sha3sum

$ make all CC=`which g++` CXX=`which g++`
/usr/bin/g++  -Wall  -c -o TestSHA3.o TestSHA3.cpp
/usr/bin/g++  -Wall  -c -o SHA3.o SHA3.cpp
/usr/bin/g++ -lstdc++  TestSHA3.o SHA3.o   -o TestSHA3
/usr/bin/g++  -Wall  -c -o HashSHA3.o HashSHA3.cpp
/usr/bin/g++ -lstdc++  HashSHA3.o SHA3.o   -o HashSHA3
/usr/bin/g++  -Wall  -c -o HashZeroBytes.o HashZeroBytes.cpp
/usr/bin/g++ -lstdc++  HashZeroBytes.o SHA3.o   -o HashZeroBytes
/usr/bin/g++  -Wall  -c -o LongTest.o LongTest.cpp
/usr/bin/g++ -lstdc++  LongTest.o SHA3.o   -o LongTest
/usr/bin/g++  -Wall  -c -o sha3sum.o sha3sum.cpp
/usr/bin/g++ -lstdc++  sha3sum.o SHA3.o   -o sha3sum