我有一个默认的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
答案 0 :(得分:0)
使用:
make all CXX=g++-5.2.0 CC=g++-5.2.0
链接的隐式规则使用CC
(make 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