我正在尝试在 make 上创建一个虚假目标,这样即使先决条件文件没有更改,我的“所有”目标也不会每次都运行,但每次运行时 make 仍然会运行每个目标。
这里有一个 Makefile 的例子:
CXX = g++
CXXFLAGS = -Wall
.PHONY: all
all: testing testing2
testing: testing.cpp
testing2: testing2.cpp
clean:
del *.exe *.o
由于使用 .PHONY 将 all 声明为虚假目标,预期的结果是通过运行 make,“testing”和“testing2”目标只有在它们各自的结果(testing.exe 和 testing2.exe)是早于他们的先决条件(testing.cpp 和 testing2.cpp)。但是,每次运行 make 时,两个目标也会同时运行。我在通过巧克力安装的 Windows 上使用 make,make --version 是 GNU Make 4.3 Built for Windows32.
虚假目标在 make windows 上不起作用吗?
您的规则说您将构建文件 testing
和 testing2
。但是您的食谱不会构建这些文件,它们会构建文件 testing.exe
和 testing2.exe
.
所以当 make 运行时,它会查找文件 testing
以查看它是否是最新的并且它不存在,因此 make 运行配方,构建 testing.exe
。然后下一次 make 运行时,它会查找文件 testing
以查看它是否是最新的并且它不存在,因此 make 运行配方,构建 testing.exe
。等等等等
这与仅适用于 all
的 PHONY 无关,那么为什么它与重建 testing
相关?
您需要在 make 中使用与您的配方创建的文件相同的名称来命名您的目标。