我還是不明白爲什麼Makefiles中的「假冒」規則有「.PHONY」作爲他們的目標。作爲先決條件將更合乎邏輯。爲什麼.PHONY:目標而不是目標:.PHONY?
我必須詳細說明嗎?如果A
取決於B
和B
是假的,那麼A
也是假的。因此,依賴關係圖.PHONY
←B
→A
是wawa令人驚訝的,與.PHONY
→B
→A
相比。 (另一個說法是,make
的實現必須處理.PHONY
目標非常特殊。)
儘管這種批評可能看起來相當理論化(毫無意義) - 「因爲make是如此古老,它的語法在這裏停留」。但我不建議任何語法變化,還存在另一種:
隨着GNU使(至少),下面的Makefile聲明瞭一個假target_A
:
target_A: _PHONY
touch target_A
_PHONY:
#noop
問題1:這是如此簡單而乾淨,我當然不是它的第一個發明家。實際上,考慮到這個選擇,爲什麼make
需要特殊的語法?
在我看來,這也可以很好地解決有關wildcards in phony targets的問題,甚至可能在shed some light on .PHONY's meaning時,當初學者懷疑時。
問題2:您能想到這種方法較差的情況嗎? (?正在調用make .PHONY
任何使用)
(我要指出的是,雖然我已經調用其他make
S,GNU提出的是,我有一些經驗與唯一實現 - 讀,寫Makefile文件)
(應該有RTFM)實際上GNU Make手冊[提到這個配方](http://www.gnu.org/software/make/manual/html_node/Force-Targets.html#Force-Targets)高效,但更便攜。我猜想速度增益是可以忽略不計的。這表明對問題2的否定答案。(?) – tiwo 2012-07-20 21:25:02