c++ - make 没有执行正确的 Makefile

标签 c++ makefile igraph

我应该先说我对 Makefiles 很陌生。

我创建了以下 Makefile:

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 -f Makefile”和“make --file=Makefile”,但这些都不起作用。

此外,在我第一次制作 Makefile 后,它就可以正常工作。输入 make 后的输出是 “g++ -o tiling_graph tiling_graph.o -L/usr/local/lib -ligraph”

我执行了 ./tiling_graph,它成功了。

然后我编辑了 tiling_graph.cpp,再次运行 make,输出是“c++ -c -o tiling_graph.o tiling_graph.cpp”并且一直如此。

如果有任何帮助,我将不胜感激。谢谢!

最佳答案

考虑 make 规则的简单方法:

target: dependency list
        commands to make the target

是它是从依赖项列表中的文件列表中创建名为 target 的文件的方法。由于 make 可以看到文件系统,它可以判断依赖列表中的任何文件是否比名为 target 的文件新,这是它重新创建 target 的信号。毕竟,如果所有依赖项都没有更改,则目标必须是最新的。

请注意,make 非常了解如何构建文件。特别是,它有很多内置的“模式”规则,所以它知道,例如,如何从 C++ 源文件 () 生成目标文件 (prog.o) prog.cpp) 或来自 C 源文件 (prog.c) 或许多其他东西。因此,您只需要在有其他需求(例如库)时实际编写一个 makefile(即使这样您也可以将其添加到环境变量中,但 makefile 更好)。

现在,您实际上并不想构建一个名为all 的文件。您想要构建一个名为 tiling_graph 的文件。所以正确的 make 规则是:

tiling_graph: tiling_graph.o
        g++ -o tiling_graph tiling_graph.o -L/usr/local/lib -ligraph

由于 make 已经知道如何创建 tiling_graph.o,它实际上可以弄清楚如何从 tiling_graph 制作 tiling_graph。 cpp.

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

all: program1 program2 program3

它告诉 make all 目标需要 program1program2program3。因此,如果您需要构建所有这三个程序,all 规则会让您只执行一个 make 命令。因为没有名为 all 的文件,所以这是一个“虚假”目标并且(至少对于 gnu make)它应该被声明为一个虚假目标:

all: tiling_graph
.PHONY: all

但如果您只想构建一个程序,您真的不需要它。

当您只键入 make(与 make target 相对)时,make 会选择 makefile 中的第一个目标。因此,如果您将通常要构建的内容放在首位,则可以节省一些输入时间。

关于c++ - make 没有执行正确的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26771474/

相关文章:

c++ - 如何创建 C++ DLL(使用 DEV -C++)并在 MT4 脚本中使用(逐步)

linux - ft-models.out makefile 错误

c++ - 更改此 makefile 以便它自动将目录中的所有文件视为依赖项?

c - Windows 生成文件 : generate debug information

python - 安装 Python igraph 的问题

r - R中igraph网络中顶点的调色板

c++ - 使用 Winsock 接收分块的 HTTP 数据

c++ - 带有 C++ directx9 调试输出的 Windows 8

c++ - 等到 QWidget 关闭

python - 为 python 安装 igraph 包