C++ 使不执行正确的Makefile

C++ 使不执行正确的Makefile,c++,makefile,igraph,C++,Makefile,Igraph,首先,我应该说我对制作文件非常陌生 我创建了以下生成文件: all: tiling_graph.o g++ -o tiling_graph tiling_graph.o -L/usr/local/lib -ligraph 我正在努力确保-ligraph包含在内。但是,当我键入“make”时,我得到以下输出:“c++-c-o tiling_graph.o tiling_graph.cpp” 为什么不使用我在当前目录中创建的Makefile?我尝试过使用“make-fmakefil

首先,我应该说我对制作文件非常陌生

我创建了以下生成文件:

all: tiling_graph.o
        g++ -o tiling_graph tiling_graph.o -L/usr/local/lib -ligraph
我正在努力确保-ligraph包含在内。但是,当我键入“make”时,我得到以下输出:“c++-c-o tiling_graph.o tiling_graph.cpp”

为什么不使用我在当前目录中创建的Makefile?我尝试过使用“make-fmakefile”和“make--file=Makefile”,但都不起作用

而且,在我第一次创建Makefile之后,它就正常工作了。键入make后的输出为 “g++-o平铺图平铺图。o-L/usr/local/lib-ligraph”

我执行了./tiling_图,结果成功了

然后我编辑了tiling_-graph.cpp,再次运行make,输出为“c++-c-o tiling_-graph.o tiling_-graph.cpp”,从那以后一直如此


我真的很感激任何帮助。谢谢

思考制定规则的简单方法:

target: dependency list
        commands to make the target
它是从依赖项列表中的文件列表生成名为
target
的文件的方法。由于
make
可以看到文件系统,因此它可以判断依赖项列表中的任何文件是否比名为
target
的文件更新,这是它重新创建
target
的信号。毕竟,如果没有任何依赖项发生更改,那么目标必须是最新的

请注意,
make
非常了解如何构建文件。特别是,它有很多内置的“模式”规则,所以它知道,例如,如何从C++源文件( PROG.CPP)或C源文件(<代码> PROG.C <代码> >)或其他许多东西来制作对象文件(<代码> PROG.O./COD>)。因此,您只需要在有其他需求时编写makefile,比如库(即使这样,您也可以将其添加到环境变量中,但makefile更好)

现在,您实际上不想构建名为
all
的文件。您想构建一个名为
平铺图
的文件。因此,正确的制造规则是:

tiling_graph: tiling_graph.o
        g++ -o tiling_graph tiling_graph.o -L/usr/local/lib -ligraph
由于
make
已经知道如何创建
tiling\u graph.o
,它实际上可以从
tiling\u graph.cpp
中找出如何制作
tiling\u graph

那么,这些
都是从哪里来的呢?使用
all
的常用方法是:

all: program1 program2 program3
它告诉
make
所有
目标需要
program1
program2
program3
。因此,如果您需要构建这三个程序,那么
all
规则将允许您只执行一个
make
命令。由于没有名为
all
的文件,因此这是一个“虚假”目标,并且(至少使用gnu make)应将其声明为虚假目标:

all: tiling_graph
.PHONY: all
但是如果你只想建立一个程序,你真的不需要它


当您只需键入
make
(与
maketarget
相反),
make
选择makefile中的第一个目标。因此,如果您将通常要构建的东西放在第一位,您将节省一些输入。

通过查看