虚假目标不适用于 Windows make

问题描述 投票:0回答:1

我正在尝试在 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 上不起作用吗?

c++ c windows gnu-make chocolatey
1个回答
1
投票

您的规则说您将构建文件 testingtesting2。但是您的食谱不会构建这些文件,它们会构建文件 testing.exetesting2.exe.

所以当 make 运行时,它会查找文件 testing 以查看它是否是最新的并且它不存在,因此 make 运行配方,构建 testing.exe。然后下一次 make 运行时,它会查找文件 testing 以查看它是否是最新的并且它不存在,因此 make 运行配方,构建 testing.exe。等等等等

这与仅适用于 all 的 PHONY 无关,那么为什么它与重建 testing 相关?

您需要在 make 中使用与您的配方创建的文件相同的名称来命名您的目标。

© www.soinside.com 2019 - 2024. All rights reserved.