makefile 中的可选依赖项

Optional dependency in makefile

我正在尝试在 GNU make 中获得一个可选的依赖项。我尝试使用 $(wildcard) 但得到了意外的输出:

test.mk:

a:
        @echo "a"
b: $(wildcard a)
        @echo "b"
        @touch a

预期输出:

$ make -f ./test.mk b
b
$ make -f ./test.mk b
a
b

实际输出:

$ make -f ./test.mk b
b
$ make -f ./test.mk b
b

关于 $(wildcard) 我错过了什么?

您没有遗漏任何关于 $(wildcard ...) 的信息。就是这样 当你第二次 运行 make b 时文件 a 已经存在,所以 make 不需要制作,因此不会 运行 它的食谱。

如果您添加:

.PHONY: a

到 makefile 然后目标 a 将被制作,如果需要,不管这样的文件是否存在 并提供您期望的行为,但是您的 post 并不清楚这是否真的会捕获您的 objective。