参考 stackoverflow 的例子:
http://stackoverflow.com/questions/5426934/why-this-makefile-removes-my-goal
下面的 :
%.txt: foo.log
#pass
%.log:
#pass
运行时,用 make a.txt --dry-run, 会得到如下的结果:
#pass
#pass
rm foo.log
也就是说, 中间文件 foo.log 被删除。
但是,如果改为:
all: foo.log
#pass
%.log:
#pass
这时候,再运行 make --dry-run, 会得到如下的结果:
#pass
#pass
也就是说 foo.log 想成为中间文件,是需要条件的。
接着再看 .PRECIOUS 的作用:
.PRECIOUS: %.log %.txt:foo.log #pass %.log: #pass
make a.txt --dry-run
执行结果:
#pass
#pass
在 .PRECIOUS 中声明的文件,没有被删除。