为什么gnu make删除此文件?

赫普·德灵顿

考虑一下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

运行后makebuild/data.txt将自动删除。为什么会这样呢?

我尝试添加.PRECIOUS: build/%到文件中,但无济于事,该文件仍被删除。我该如何预防?

阿兰德

根据GNU Make文档

您还可以将隐式规则的目标模式(例如'%.o')列出为特殊目标.PRECIOUS的必备文件,以保留由目标模式与该文件名匹配的规则创建的中间文件。

前提条件.PRECIOUS是现有隐式规则的(精确)目标模式。

在您的情况下,它将%/data.txt改为。

文档暗示了这一点,但对此并不十分清楚。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章