我正在运行卢布图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/

10-10 20:10
查看更多