0

我正在运行 Lubuntu 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 之间有四个空格;我从未做过类似的事情)。似乎更改没有保存。我在想要么让崩溃,我的编辑 Geany 搞砸了,文件系统很奇怪,或者我的 SSD 损坏了。

4

1 回答 1

1

您的编辑器可能出错了,或者您的文件系统可能很奇怪,或者您的 SSD 可能已损坏,但我通常会发现,当某些事情无法正常工作时,问题通常是我犯了一个错误 :-)。

在这种情况下,您输入了错误的目标:

SpringTesting.o: SquaresTesting.cpp

您已经告诉 make 这条规则将创建SpringTesting.o. 但是 make 正试图找到一种方法来制作SquaresTesting.o. 由于您没有构建规则SquaresTesting.o,因此 make 尝试找到一个,它确实找到了一个:有一个内置规则可以.o从 a构建任何规则.cpp,并且那里恰好有一个SquaresTesting.cpp权利。

由于 C++ 编译器的默认配置是g++,所以它就是这样使用的。

如果你确定你的目标说:

SquaresTesting.o: SquaresTesting.cpp

你应该准备好了。当然,你也可以利用make 的内置规则;你的整个makefile可以写成:

CXX = clang

all: SquaresTesting

SquaresTesting: SquaresTesting.o Vector2d.o

我在这里假设您也想链接Vector2d.o,尽管您的 makefile 没有显示。

于 2013-06-03T05:20:12.183 回答