phony 詳解
1: 一個目標,可以產生target文件,也可以不產生target文件
不產生文件,則每次make echo。都將執行recipe。
因爲make總是妄圖產生一個比temp更新的target--echo文件。
echo: temp
@echo "$(shell ls -l temp)"
2:一個目標,可以有依賴,也可以沒有依賴。
沒有依賴,有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: 就是讓目標永遠執行。
就算有和target重名的文件,也忽略不管。
4: 改善性能
已知phony 目標並非是由其它文件生成的實際文件,make 會跳過隱含規則搜索。這就是聲明phony 目標會改善性能的原因,即使你並不擔心實際文件存在與否。
也就是說對於phony目標,make會乖乖的執行recipe,不會去管隱含規則那一套。因爲它知道,對於phony目標。目的就是爲了執行recipe. 不是妄圖產生什麼文件,或者中間文件。
5: PHONY使用2個必要條件
target沒有依賴
target不生成對應的文件