2013-10-30 25 views
0

GNU Make手冊說,選擇最「特定」的隱式規則,這是一件好事。除了......如果有一條規則不需要隱含的先決條件,即使它更「一般」,也會選擇它。請參閱:如何使Make始終使用最具體的隱式規則?

> touch existing 
> cat Makefile 
%.o: existing 
@echo general 

foobar%.o: foobar%.i 
@echo specific 

foobar%.i: ; 
> rm foobar0.i 
> make -r foobar0.o 
general 
> touch foobar0.i 
> make -r foobar0.o 
specific 

恕我直言,最具體的規則,應始終選擇,不管是否有0隱含prerequsites,尤其是,是否有這樣的先決條件已經存在或者沒有。但我不想在這裏問「爲什麼」。

相反,有人可以建議我,如何強制所需的行爲。無論如何,我總是希望應用最具體的規則。有沒有辦法強制呢?

+0

問題是,始終使用最直接的規則(最少數量的中間步驟)作爲第一優先級。使用更具體的模式規則(相對於更通用的模式規則)是次要的,因此僅對於具有相同數量的中間步驟的鏈條而言很重要。我不知道有什麼辦法可以改變這些優先事項。 –

+0

你使用什麼版本的產品?規則的選擇在GNU make 3.81和3.82之間改變。 「最具體」的規則選擇是我相信的3.82行爲,而不是3.81行爲。如果你反轉makefile中這兩條規則的順序,你是否會得到你期望的行爲(如果你使用的是3.81)? –

回答

0

好,好,我可以這樣做:

%.o: %.dummy 
    @echo general 

%.dummy: ; 

我只是不喜歡這種東西。有沒有一個醜陋的方式。