2012-05-10 42 views
1

我想有下面的Makefile:虛擬的Makefile目標

a: b 

b: c 
    touch b 

c: 
    # time consuming task that only needs to run once 

有沒有辦法阻止依賴鏈當b已經存在?我可以做一個手動清理,以擺脫b觸發重新運行c。如果b存在,我希望能夠多次運行a而不觸發c

我有很多像c這樣的任務,所以我想避免每個單獨的任務都接觸一個文件,而且我不希望文件系統混雜在不必要的文件中。

+0

這使的版本? – Beta

+0

它是GNU Make 3.81。 –

+0

你說你想運行'c'取決於是否存在'b'。你還會說「我有很多像'c'這樣的任務,所以我想避免每個單獨的任務都接觸一個文件,而且我不希望文件系統混雜在不必要的文件中。」這看起來像是一個矛盾。 – Beta

回答

3

你可以寫你的Makefile爲:

a: b 

b c: 
    # time consuming task that only needs to run once 
    touch b 

make c將無條件打電話給你的任務。

make b只在文件b不存在時執行您的任務。

make a依賴於B,所以當B不存在的任務只是執行,

+0

Runing,例如,'a'五次,我只想'b'運行一次。 –

+0

我想你應該澄清這個問題。調用「make a」五次會導致您的「耗時的任務」在上面的腳本中只運行一次。 – mirk

+0

我試圖澄清一些情況。 –