2013-10-10 57 views
1

考慮到這個非常簡單的Makefile文件,Makefile文件 - 最新的規則,它是不是一個文件

all: a b 
    @echo done 
a: 
    touch [email protected] 
b: 
    touch [email protected] 

我沒有得到我預期的行爲。

事實上,我希望我的規則「所有」執行對象只有在其depencies之一不是最新的。

但是在第一$化妝,我得到

touch a 
touch b 
done 

而在其他

done 

我undenstand說:「最新的」通常限定一個文件,但... 有什麼辦法有規則「都」被認爲是最新的,當它的所有dependies是誰?

非常感謝,

PS:我知道的伎倆$全觸控,但如果目標不存在,則使將始終運行的配方,這不是點

回答

1

號。

有你的食譜all可以檢查,看看是否有任何先決條件的已建成和不同的表現如果是哈克的方式。至少,如果你使用GNU使。

ETA:

一個辦法是到$(eval BUILT = 1)添加到每一個目標,然後在all目標,你可以看到,如果BUILT設置。這需要GNU make的一個適度的最新版本:

BUILT = 

all: a b 
     @[ -n '$(BUILT)' ] && echo done 
a: 
     touch [email protected] $(eval BUILT = 1) 
b: 
     touch [email protected] $(eval BUILT = 1) 
+0

什麼可能是那些「hacky的方式」? – Chmool

相關問題