我想知道如果仅订单先决条件是虚假目标,它是否会失去其仅订单优先级。考虑以下:
%.make: unpack_chroot
schroot $(CHROOT) make $*
%.copy: | unpack_chroot
rsync -a input/$*/ $(CHROOT)/input/$*/
unpack_chroot: input/chroot.tar.gz
mkdir -p $(CHROOT)
tar -C $(CHROOT) -zxf $<
.PHONY: unpack_chroot
所有 %.make 和 %.copy 目标都是.PHONY
. 其中一些目标依赖于复制到 chroot 中的文件,而另一些则不依赖。那些确实是用明确的依赖关系定义的:
a.make: a.copy
c.make: c.copy
但是,如果unpack_chroot
不是仅订单的先决条件,并且作为不在同一 make 过程中的另一个 make 目标的先决条件处理的一部分被解包,unpack_chroot
则在 %.copy 运行时将被认为是最新的,并且不会重新制作 %。复制; 至少这是我所看到的。目前,unpack_chroot
不是假的,而是被创造出来的。我想让它变得虚假,但想澄清这种行为。