phony 詳解



phony 詳解




1: 一個目標,可以產生target文件,也可以不產生target文件


echo目標就不產生echo文件
不產生文件,則每次make echo。都將執行recipe。
因爲make總是妄圖產生一個比temp更新的target--echo文件。
echo: temp
@echo "$(shell ls -l temp)"

2:一個目標,可以有依賴,也可以沒有依賴。


clean目標,就沒有依賴。
沒有依賴,有2種情況。
一個是target是個文件,則target永遠是最新的。target的recipe永遠不會被執行。(參見3)
一個是target不能被make生成,則target的recipe永遠要執行。(參見1)


clean就是一個沒有文件的taget,則make clean需要每次執行recipe。
clean:
rm *.o


如果目錄下面,恰好有個文件叫做clean
則clean永遠是最新的。make clean每次都不會執行任何動作。


3: 爲防止target和目錄下面文件重名,則引入.PHONY: 就是讓目標永遠執行。


PHONY的意義就是,這個目標對應的文件是不需要生成的。只是爲了執行一組動作。

就算有和target重名的文件,也忽略不管。


4: 改善性能


已知phony 目標並非是由其它文件生成的實際文件,make 會跳過隱含規則搜索。這就是聲明phony 目標會改善性能的原因,即使你並不擔心實際文件存在與否。

也就是說對於phony目標,make會乖乖的執行recipe,不會去管隱含規則那一套。因爲它知道,對於phony目標。目的就是爲了執行recipe. 不是妄圖產生什麼文件,或者中間文件。


5: PHONY使用2個必要條件


target沒有依賴

target不生成對應的文件


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章