偽目標就是總是被執行的目標,相對於目標來說,偽目標不會去考慮它的依賴的時間戳與自己時間戳的新舊關係,從而決定是否執行規則。偽目標格式:
.PHONY:clean clean: -rm *.o
在makefile裡面通常會將clean這個目標指定為偽目標,這個目標有個特性就是無依賴,那麼每次make clean的時候都會執行它的規則:-rm *.o,那麼為什麼要指定為偽目標,平時看到的makefile都是把它當中一般目標。假設不指定clean為偽目標,我當前資料夾下有1個檔案:
a.c。我的makefile:
1 all: 2 gcc a.c -o clean 3 5 clean: 6 rm clean
執行make後,就生成了clean這個可執行檔案,假設現在我想要清除生成的檔案,就執行make clean,結果提示:
make: “clean”是最新的。
這是因為將clean作為一個普通目標來處理,根據make自動規則推導,它本打算執行:gcc clean.c -o clean,結果發現找不到依賴clean.c,它就認為clean是最新的什麼都不做。如果加上:
.PHONY:clean
來宣告為偽目標,那麼它就不管什麼依賴不依賴,全都強制執行。