2015-11-19 27 views
1

當我在忍者中有多個輸出的規則時,它假定所有的輸出都被更新了,並且所有的依賴被重建,即使它們根本沒有改變。避免重建依賴不變的輸出

這經常會出現一個代碼生成步驟,就像解析器生成器一樣。

E.g.對於檸檬解析器生成器:

rule lemon 
    command = lemon $in 

build grammar.c grammar.h grammar.out: lemon grammar.y 

如果grammar.y得到更新,但grammar.h運行LEMON後不會改變。 LEMON檢測到這一點並且不更新文件。儘管如此,忍者重建了所有依賴grammar.h的東西。

我該如何預防?

回答

1

restat添加到您的規則。從documentation

restat
如果存在,導致忍者重新STAT命令的執行後的命令的輸出。其命令沒有改變的修改時間的每個輸出將被視爲從不需要構建。這可能會導致輸出的反向依賴關係從掛起構建操作列表中刪除。

這樣,規則變爲:

rule lemon 
    command = lemon $in 
    restat = 1