如果先决条件是虚假目标,则仅订单先决条件的行为是什么?

Cra*_*aig 5 makefile

我想知道如果它是一个虚假目标,仅订单先决条件是否会失去其仅订单优先级。考虑以下:

%.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
Run Code Online (Sandbox Code Playgroud)

所有 %.make 和 %.copy 目标都是.PHONY. 其中一些目标依赖于复制到 chroot 中的文件,而其他目标则不然。那些确实是用显式依赖关系定义的:

a.make: a.copy
c.make: c.copy
Run Code Online (Sandbox Code Playgroud)

但是,如果unpack_chroot不是仅限订单的先决条件,并且是作为不在同一 make 进程中的另一个 make 目标的先决条件处理的一部分而解包的,unpack_chroot则在 %.copy 运行时将被视为最新的,并且不会重新制作 %。复制; 至少这是我所看到的。目前,unpack_chroot它不是假的,而是被创建的。我想让它变得虚假,但想澄清这种行为。

小智 -3

根据此电子邮件(http://kolpackov.net/pipermail/notes/2004-January/000001.html),正常先决条件和仅订单先决条件之间的唯一区别似乎是后者不会包含在自动 make 变量中,例如作为$^。

从我运行的一些测试来看,这似乎是唯一的区别。在所有其他方面,它们都被视为与正常先决条件相同。

  • 不,如果目标早于仅订单先决条件,则仅订单先决条件不会导致目标重建。 (2认同)