2011-11-17 26 views
3

製作依賴我有一個生成文件如:與現有的目標和丟失的依賴

A : B 
    echo "made A" 
B : D 
    echo "made B" 

這裏,B存在,但d不(有時是這樣,有時沒有)

現在如果我執行make,對我吼叫: make:*沒有規則來制定目標'D','B'需要。停止。

有什麼辦法,以正確的行爲,即:

  • B和d不存在:失敗
  • b存在,d不和比B更新,應用配方
  • b存在, d存在,但較舊的:當B存在並且d不沒有做任何事情
  • :不重建B(你不能),但你可以用B來構建一個

使用以D作爲目標的空行總是會執行配方來構建B,但是不會,所以它不是必需的!

有什麼辦法嗎?

我發現用空規則

D : 

末,使失蹤d不會失敗的解決方案。所以現在是除了B被重做,如果d丟失,可B中的配方進行測試OK:

B : D 
    if [ D ] ; then echo "doing B with D"; fi 

但它似乎真的hackish的...

回答

3

讓您可以重新生成B通過將B標記爲中間值:

.INTERMEDIATE : B 

然後,您可以刪除D的空白規則,並且匹配「正確」行爲的四個條件。

+0

謝謝,就是這樣! GNU文檔說 .INTERMEDIATE .INTERMEDIATE依賴的目標被視爲中間文件。見隱式規則鏈。 ,所以我認爲它只與隱式規則有關。 – makapuf