4.7 內建的特殊目標名
一些名字作為目標使用則含有特殊的意義︰
.PHONY
特殊目標.PHONY的先決條件是假想(phony)目標。假想(phony)目標是這樣一些目標,make無條件的執行它命令,和
目錄下是否存在該檔案以及它最後一次更新的時間沒有關係。詳細內容參閱假想(phony)目標。
.SUFFIXES
特殊目標.SUFFIXES的先決條件是一列用於後置規則(suffix rule)檢查的後置。詳細內容參閱舊式的後置規則(suffix
rule)。
.DEFAULT
.DEFAULT指定一些命令,這些命令用於那些沒有找到規則(具體規則或隱含規則)更新的目標。詳細內容參閱定
義最新類型的-預設規則。如果.DEFAULT指定了一些命令,則所有提及到的檔案只能作為先決條件,而不能作為任
何規則的目標;這些指定的命令也只按照他們自己的模式執行。詳細內容參閱隱含規則搜尋算法。
.PRECIOUS
特殊目標.PRECIOUS的先決條件將按照下面給定的特殊模式進行處理︰如果在執行這些目標的命令的過程中,
make被關閉或中斷,這些目標不能被刪除,詳細內容參閱關閉和中斷make;如果目標是中間檔案,即使它已經沒
有任何用途也不能被刪除,具體情況和該目標正常完成一樣,參閱隱含規則鏈;該目標的其它功能和特殊目標
.SECONDARY的功能重疊。如果規則的目標樣式與先決條件的檔案名匹配,您可以使用隱含規則的格式(如‘
%.O’)列舉目標作為特殊目標.PRECIOUS的先決條件檔案來儲存由這些規則建立的中間檔案。
.INTERMEDIATE
特殊目標.INTERMEDIATE的先決條件被處理為中間檔案。詳細內容參見隱含規則鏈。.INTERMEDIATE如果沒有先
決條件檔案,它將不會發生作用。
.SECONDARY
特殊目標.SECONDARY的先決條件被處理為中間檔案,但它們永遠不能自動刪除。詳細內容參見隱含規則鏈。
.SECONDARY如果沒有先決條件檔案,則所有的makefile檔案中的目標都將被處理為中間檔案。
.DELETE_ON_ERROR
如果在makefile檔案的某處.DELETE_ON_ERROR作為一個目標被提及,則如果該規則發生變化或它的命令沒有正
確完成而退出,make將會刪除該規則的目標,具體行為和它受到了刪除信號一樣。詳細內容參閱命令錯誤。
.IGNORE
如果您特別為目標.IGNORE指明先決條件,則MAKE將會忽略處理這些先決條件檔案時執行命令產生的錯誤。如果
.IGNORE作為一個沒有先決條件的目標提出來,MAKE將忽略處理所有檔案時產生的錯誤。.IGNORE命令並沒有特
別的含義,.IGNORE的用途僅是為了和早期版本的兼容。因為.IGNORE影響所有的命令,所以它的用途不大;我們
推薦您使用其它方法來忽略特定命令產生的錯誤。詳細內容參閱命令錯誤。
.SILENT
如果您特別為.SILENT指明先決條件,則在執行之前MAKE將不會回顯重新構造檔案的命令。如果.SILENT作為一個
沒有先決條件的目標提出來,任何命令在執行之前都不會列印。.SILENT並沒有特別的含義,其用途僅是為了和早
期版本的兼容。我們推薦您使用其它方法來處理那些不列印的命令。詳細內容參閱命令回顯。如果您希望所有的命
令都不列印,請使用‘-s’或‘-silent’選項(詳細參閱選項概要)。
.EXPORT_ALL_VARIABLES
如該特殊目標簡單的作為一個目標被提及,MAKE將預設地把所有變數都傳遞到子進程中。參閱使與子MAKE通信
的變數。
.NOTPARALLEL
如果.NOTPARALLEL作為一個目標提及,即使給出‘-j’選項,make也不使用並行執行。但遞迴的make命令仍可並行執
行(在呼叫的makefile檔案中引入(include).NOTPARALLEL的目標的例外)。.NOTPARALLEL的任何先決條件都將忽略。
任何定義的隱含規則後置如果作為目標出現都會視為一個特殊規則,即使兩個後置串聯起來也是如此,例如‘.c.o’。
這些目標稱為後置規則(suffix rule),這種定義方法是舊式的定義隱含規則的方法(目前仍然廣泛使用的方法)。原則上
,如果您要把它分為兩個並把它們加到後置清單中,任何目標名都可採用這種方法指定。實際上,後置一般以‘.’開
始,因此,這些特別的目標同樣以‘.’開始。具體參閱舊式的後置規則(suffix rule)。
4.8 具有多個目標的規則
具有多個目標的規則等同於寫多條規則,這些規則除了目標不同之外,其餘部分完全相同。相同的命令應用於所有目
標,但命令執行的結果可能有所差異,因此您可以在命令中使用‘$@’分發不同的實際目標名稱。這條規則同樣意味