Linux Make正在运行旧的/已损坏的命令

Linux Make正在运行旧的/已损坏的命令,linux,makefile,Linux,Makefile,我正在运行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.

我正在运行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之间有四个空格;我从未做过类似的事情)。看起来变化并没有节约。我认为要么是使崩溃,要么是我的编辑器出了问题,要么是文件系统出了问题,要么是我的SSD出了问题。

你的编辑器出了问题,要么是你的文件系统出了问题,要么是你的SSD出了问题,但我通常会发现,当某些东西不能正常工作时,问题往往是我犯了错误:-)

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

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

由于C++编译器的默认配置是“代码> G++< /COD>,这就是它使用的。

如果你确定你的目标说:

SquaresTesting.o: SquaresTesting.cpp
你应该准备好了。当然,您也可以利用make的内置规则;您的整个makefile可以编写为:

CXX = clang

all: SquaresTesting

SquaresTesting: SquaresTesting.o Vector2d.o

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

删除makefile并尝试
make
会返回以下结果:
make:**未指定目标,也未找到makefile。停止。
。重新添加makefile并再次尝试
make
会产生与g++相同的ghost命令。是否使用vi以外的任何其他工具打开makefile?-->规则中的命令需要其中一个选项卡。。。使用cat-e-t-v makefile检查它,它将行结尾显示为$,制表符显示为^I。还可以尝试运行:
make-f makefile all
如果我使用了您的makefile,我将如何设置标志?什么类型的标志?预处理器标志有内置变量,如“代码> -i <代码> >代码> -d>代码>:即 CppFLAGS < /C> >,也有C标记,如“代码> -G < /COD>或<代码> -O/COD>,即 CFLAGS < /C>,以及C++标志,如…嗯<代码>-g和
-O
:-)。这是
cxflags
。然后是链接时间标志,如
-L
;它们可以进入
LDFLAGS
。链接行上有一些库标志,如
-l
;它们进入
LDLIBS
.PS。别觉得自己愚蠢。编程最关键的技能不是智商200,而是对细节的关注。计算机,不幸的是对我们人类来说,都是关于细节的。。。