makefile中的偽目標

weixin_30639719發表於2020-04-05

  偽目標就是總是被執行的目標,相對於目標來說,偽目標不會去考慮它的依賴的時間戳與自己時間戳的新舊關係,從而決定是否執行規則。偽目標格式:

.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

來宣告為偽目標,那麼它就不管什麼依賴不依賴,全都強制執行。

 

轉載於:https://www.cnblogs.com/thammer/p/4456584.html

相關文章