2010-06-21 81 views
0

我試圖執行一個調用「make cleanlists」的目標。這個目標沒有先決條件,應該立即執行(以我的理解),而不觸及其他規則。強制GNU make執行特定目標

.PHONY: cleanlists 
cleanlists: 
    @echo cleaning source and header lists .. 
    @rm -f sourcelist.mk 
    @rm -f headerlist.mk 
    @echo done. 

但在情況下,這兩個文件不存在,有這些文件作爲先決條件的其他規則進行檢查,並執行「cleanlists」目標之前,最後導致他們的再生。

有沒有簡單的方法強制make來避免這種行爲?

感謝

+0

我不明白。你是說「讓清潔員」不只是擺脫這些文件? – 2010-06-21 10:45:56

+0

不,在刪除它們之前首先創建這些文件(如果它們在調用make時不存在) – rainer 2010-06-21 12:13:05

+0

這很奇怪。如果它很小,你可以發佈整個makefile嗎?如果它很大,請嘗試刪除部分,直到它足夠小以便發佈或問題突然消失(這會給你一個很大的線索)。 – Beta 2010-06-21 13:24:50

回答

1

這兩個文件的.mk名稱表明,在其他地方你的makefile要包括他們作爲makefile文件內容進行分析和執行:

include sourcelist.mk 
include headerlist.mk 

爲了執行你使用最新的makefile生成make cleanlists命令,make重新生成這些文件並在計算依賴關係和執行命令之前重新生成整個生成文件,如How Makefiles Are Remade中所述。

這對於一個乾淨的規則沒什麼意義,但使不知道。您可以使用this trick from the manual來特別對待此特定規則:

ifneq "$(MAKECMDGOALS)" "cleanlists" 
include sourcelist.mk 
include headerlist.mk 
endif 
+0

感謝:這工作相當好! – rainer 2010-06-23 11:02:50