【发布时间】:2015-08-20 15:24:02
【问题描述】:
我有一个默认的 C/C++ 工具集 (gcc 4.8),并且最近在它自己的目录中构建并安装了 5.2。我想使用一个使用 CC 和 CXX 显式编译但使用隐式内置规则链接 .o 文件以构建可执行文件的 makefile 构建一些 C++ 程序。
当我在 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编译器的链接步骤?
这是制作文件:
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
这是制作的结果:
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
【问题讨论】:
-
发布 Makefile 的内容。 Make 不了解 C/C++;它只使用变量
CC和LD如果步骤规则这样做。 -
你的makefile不完整,link命令在哪里?
-
你读过正文吗?链接是通过隐式规则完成的。该规则由“TestSHA3: TestSHA3.o SHA3.o”之类的行触发。