我有一个Makefile,大致是这样的:
.PRECIOUS: %.a %.b %.c
%.a:
touch $@
%.b: %.a
touch $@
%.c: %.b
touch $@
如果我使用 a 创建“test.c” make test.c
,则所有 3 个文件(test.a
、test.b
、test.c
)都会正确创建。但是,如果我现在删除test.a
,然后尝试重新创建test.c
,则什么也不会发生。
原因很明显:因为test.c
只依赖于test.b
,并且test.b
没有改变,所以不需要重建。然而,test.b
应该重建,因为test.a
消失了,而且应该传播到test.c
。我发现这种行为是一种非常不直观的副作用。
我可以以某种方式让 make 以直观的方式处理“传递”依赖项吗? (即删除 后test.a
,必须重建所有目标。)
该问题仅发生在模式规则中。
(Ps我需要所有中间文件,这就是为什么PRECIOUS。GNU Make的默认行为是删除中间文件。)