我想知道,如果訂單唯一的先決條件失去了它的訂單隻有優先級,如果它是假目標。考慮以下內容:如果先決條件是虛假目標,那麼僅限訂單的先決條件的行爲是什麼?
%.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
是不是命令,唯一的先決條件,並解壓縮的先決條件,另一個處理的一部分使目標不在相同品牌的過程,當%.copy運行時,unpack_chroot
將被視爲最新,並且不會重新生成%.copy;至少這是我所見過的。目前,unpack_chroot
不是假的並被創建。我想弄虛作假,但要澄清這種行爲。
你寫:_if'unpack_chroot'是不是命令,唯一的先決條件,並解壓縮爲先決條件,另一個處理的一部分使目標[...使]不會重拍'%.copy'_。這當然不是真的。如果正常的先決條件被重建,那麼所有依賴它的目標都將被重建。然而,取決於這樣的虛擬目標通常不是一個好主意,因爲每一次新的make調用都會重新運行目標。同時聲明規則'.PHONY'將強制所有依賴它的目標始終重建。 – MadScientist
對不起,我的壞。已經更新了這個問題。如果前提條件是由另一個make過程構建的。然而,在說,我創建了一個小型獨立測試來檢查make的調試輸出。在這種情況下,make做的是正確的事情,並且不需要訂單唯一的先決條件。我不知道爲什麼它在實際的makefile中是必需的,因爲依賴性處理應該是相同的。我將需要爲實時生成生成調試,並查看實際正在執行的操作,這需要訂單唯一的先決條件。 – Craig
我打算回答這個問題,因爲我不認爲這與我的想法有關。 – Craig