我正在运行卢布图12.10。我的make文件名为makefile
,如下所示:
all: SquaresTesting.o Vector2d.o
clang -o SquaresTesting SquaresTesting.o
SpringTesting.o: SquaresTesting.cpp
clang -c SquaresTesting.cpp
Vector2d.o: Vector2d.cpp Vector2d.h
clang -c Vector2d.cpp
我和那个文件在同一个目录中,但是当我执行
make
时,它会运行g++ -c -o SquaresTesting.o SquaresTesting.cpp
(g++和-c之间有四个空格;我从未执行过这样的操作)。似乎变化并不能拯救我们。我想要么让崩溃,要么我的编辑搞错了,文件系统很奇怪,要么我的SSD坏了。 最佳答案
你的编辑器可能出了问题,或者你的文件系统可能很奇怪,或者你的SSD可能已经损坏,但我通常发现,当某些东西不能正常工作时,问题往往是我犯了一个错误:-)。
在这种情况下,您键入了错误的目标:
SpringTesting.o: SquaresTesting.cpp
您已经告诉make,此规则将创建
SpringTesting.o
。但是make试图找到一种方法来制作SquaresTesting.o
。由于您没有要生成SquaresTesting.o
的规则,make尝试找到一个,但它确实找到了一个:有一个内置的规则可以从.o
中生成任何.cpp
,并且正好有一个SquaresTesting.cpp
。由于C++编译器的默认配置是
g++
,这就是它所使用的。如果你让你的目标说:
SquaresTesting.o: SquaresTesting.cpp
你应该准备好了。当然,您也可以利用make的内置规则;您的整个makefile可以写成:
CXX = clang
all: SquaresTesting
SquaresTesting: SquaresTesting.o Vector2d.o
我在这里假设您也想链接
Vector2d.o
,尽管您的makefile没有显示这一点。关于linux - Make正在运行旧/损坏的命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16889966/