gpt4 book ai didi

gnu-make - 为什么 gnu make 删除这个文件?

转载 作者:行者123 更新时间:2023-12-05 07:03:03 29 4
gpt4 key购买 nike

考虑这个Makefile:

.PHONY: all

all: main.txt

main.txt: build/main.txt
cp build/main.txt .

%/main.txt: %/data.txt
cp $*/data.txt $*/main.txt

%/data.txt:
touch $*/data.txt

运行 make 后,build/data.txt 会自动删除。为什么会这样?

我尝试将 .PRECIOUS: build/% 添加到文件中,但没有用,文件仍然被删除了。我怎样才能避免这种情况?

最佳答案

根据GNU Make documentation

You can also list the target pattern of an implicit rule (such as ‘%.o’) as a prerequisite file of the special target .PRECIOUS to preserve intermediate files created by rules whose target patterns match that file’s name.

.PRECIOUS 的先决条件需要是现有隐式规则的(准确)目标模式。

在您的情况下,这将是 %/data.txt

文档对此有暗示,但不是特别清楚。

附带说明:据我所知,build/main.txt 不会自动删除,因为它被明确命名为 main.txt 的先决条件target 和 build/data.txt 被自动删除,因为它从未明确命名。

关于gnu-make - 为什么 gnu make 删除这个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63374364/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com