Linux Make正在运行旧的/已损坏的命令
我正在运行Lubuntu 12.10。我的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.
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>代码>:即-O
:-)。这是cxflags
。然后是链接时间标志,如-L
;它们可以进入LDFLAGS
。链接行上有一些库标志,如-l
;它们进入LDLIBS
.PS。别觉得自己愚蠢。编程最关键的技能不是智商200,而是对细节的关注。计算机,不幸的是对我们人类来说,都是关于细节的。。。