【C編程系列】Makefile中.PHONY的使用

在C項(xiàng)目構(gòu)建中,經(jīng)常在Makefile文件中用到.PHONY配置項(xiàng)。.PHONY配置項(xiàng)的主要作用在于避免指定命令和項(xiàng)目下的同名文件沖突,進(jìn)行性能優(yōu)化。.PHONY [command name] 顯式指定了一個(gè)命令名稱【而不是實(shí)際文件名】,是為了避免該命令名稱與makefile同路徑下的文件名重名沖突,以使make [command name]命令可以正確被解析、執(zhí)行。下面將舉例說明。

例 1

如果編寫一個(gè)規(guī)則名稱為clean,不產(chǎn)生目標(biāo)文件,那么該命令在執(zhí)行make clean時(shí)規(guī)則都會被執(zhí)行,makefile內(nèi)容如下:

clean:
    rm -f *.o temp

rm 命令不產(chǎn)生任何clean文件。

  • 如果目錄下不存在名為"clean"的文件,則運(yùn)行make clean時(shí),命令都會正常執(zhí)行;
  • 如果目錄下存在名為"clean"的文件,則運(yùn)行make clean時(shí),命令規(guī)則會失效,文件"clean"沒有依賴文件,始終是最新的,make clean永遠(yuǎn)不會被執(zhí)行。
    為了解決上述問題,可以使用.PHONY clean指明該clean命令。如下:
.PHONY clean

clean:
    rm -f *.o temp

這樣執(zhí)行命令make clean會自動(dòng)忽略名為"clean"文件的存在。已知.PHONY配置項(xiàng)的目標(biāo)并不是其他文件生成的實(shí)際文件,make命令會自動(dòng)繞過隱含規(guī)則搜索過程,因此聲明.PHONY配置項(xiàng)會改善性能,bi且不需要擔(dān)心實(shí)際同名文件存在與否。

例 2

如果.PHONY目標(biāo)有依賴關(guān)系。當(dāng)一個(gè)目錄中存在多個(gè)可運(yùn)行程序,將其配置在同一個(gè)makefile文件。由于make [command name/ Default command]默認(rèn)缺省規(guī)則是makefile文件中的第一個(gè)規(guī)則,一般將這第一個(gè)規(guī)則稱為"all",其依賴文件為多個(gè)可運(yùn)行程序,如下:

all:  p1 p2 p3
.PHONY: all
p1:  p1.o utils.o
       cc -o p1 p1.o utils.o
p2:  p2.o utils.o
       cc -o p2 p2.o utils.o
p3:  p3.o utils.o
       cc -o p3 p3.o utils.o

其中p1、p2和p3是三個(gè)可執(zhí)行文件,make把"all"作為主要規(guī)則,每次執(zhí)行時(shí)都嘗試把"all"更新,因此會檢查其依賴文件p1、p2和p3是否需要更新,如果需要,就把它們更新,從而達(dá)到我們的目的。通過.PHONY指定目標(biāo)為all,可以避免目錄下同名文件的干擾,即不用檢查規(guī)則"all"是否有同名文件存在,也不需要查詢?nèi)魏坞[含規(guī)則,直接假定指定的規(guī)則"all"需要被更新。


綜上所述,.PHONY是一個(gè)偽目標(biāo),可以有效防止在Makefile文件中定義的可執(zhí)行命令的目標(biāo)規(guī)則和工作目錄下的實(shí)際文件出現(xiàn)名稱沖突,并提高了執(zhí)行Makefile的性能。


Bob Huang
2018.0608

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 快速過敏反應(yīng)是瞬間的, 慢的過敏反應(yīng)是量的累積, 有那么多能吃并且安全的,為啥非得挑一些麻煩危險(xiǎn)的吃……
    家有兩男寶閱讀 348評論 0 0
  • “棍棍!?”小馬使勁的撥開兩大坨脂肪,露出臉來,被冷落的兩位美女對這突如其來的造訪及搗亂者投以憤慨的目光,卻依然把...
    半點(diǎn)正經(jīng)閱讀 432評論 0 0
  • hanxuerping閱讀 171評論 0 0
  • 了解公司架構(gòu),業(yè)務(wù)方、開發(fā)、測試、BI等等 了解部門分工,多少組,每個(gè)組負(fù)責(zé)什么,自己的組負(fù)責(zé)什么,什么地位 了解...
    漠往閱讀 475評論 0 0

友情鏈接更多精彩內(nèi)容