makefile 中的规则顺序很重要吗?

Order of rules in makefile matters?

我的makefile有两行:

Rule_1

File.o : File.cpp
    g++ -c File.cpp -o File.o 

Rule_2

File   : File.o
    g++    File.o   -o File 

我希望 File.cpp 中的任何更改都会导致 File.oFile 重新生成。这是通过以下方式完成的:

Makfile:

Rule_2
Rule_1

但是下面的不行只能重新生成File.o

Rule_1
Rule_2

为什么?我注意到,我没有在我的 makefile 中使用任何 all:。使用 all: File 以上两种方法都有效。

我假设你的 make 工具是 GNU Make。

除非您在命令行中指定目标,例如:

make File

make 将默认尝试创建第一个目标 在 makefile 中,在您的问题案例中是 File.o。 参见 How make Processes a Makefile

当您添加:

all: File

在最上面,all是第一个目标,依赖于File, 这又取决于 File.o.

我建议您将其替换为:

.PHONY: all

all: File

Phony targets