理查德·WM·瓊斯,作家
目標原始碼
- 僅支援一種依賴項解析策略 - “如果目標檔案遺失或早於依賴項之一,則執行組譯指令。” 目標計劃實施其他策略,例如檢查 URL 是否存在、將修改時間與任何文件進行比較、評估包構建
廣治 ,比較校驗和,運行測試案例並選擇性地跳過測試。 - 在處理建置目標時,make 不會分隔檔案和規則名稱,因此,不會檢查執行規則時是否會實際建立它聲稱要建立的檔案。 例如,如果您有一個名為“test”的規則,它運行帶有測試的腳本,則意外創建了一個名為“test”的文件,那麼測試將停止被調用,因為make 會認為目標已構建並且不需要任何操作(要解決 make 中的問題,您可以指定「.PHONY: test」指令)。 目標明確分隔文件和規則名稱。
- 只為彙編指令提供一個參數時出現問題。
目標可讓您使用任意數量的命名參數。 例如,您可以從名稱中單獨提取偵錯檔案的符號:
- 與 shell 解釋器互動時出現問題。 例如,需要控製檔案名稱和目錄名稱中的空格轉義、執行每個指令時啟動單獨的 shell 解釋器所造成的資源浪費、「$」字元的雙重解釋(在 shell 和 make 中都使用),考慮到縮排。
這些問題在目標中透過使用“%”符號代替“$”作為彙編變數(“$”僅保留用於 shell)並使用解析器來解決
拉魯爾(1) ,這要求您用引號將路徑和檔案名稱括起來,並用花括號突出顯示程式碼區塊。 整個命令區塊在命令 shell 的一個實例中啟動,並且在命令區塊內,允許任意程式碼格式,無需引用特殊空格。曾是:
目標:foo.o bar.o
${CC} ${CFLAGS} $< -o $@變成:
“目標”:“foo.o”,“bar.o”{
%CC %CFLAGS %< -o %@
}
目標的其他功能:
- 指定任意名稱和參數的可選支援:
全部目標=:“目標”
目標連結 =
“目標”:“foo.o”,“bar.o”{...}目標編譯(名稱)=
"%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ } - 兩種啟動模式:將建構目標與檔案名稱相符的 make 模式(例如,檔案「foo.o」匹配目標「%name.o」),以及直接編譯模式:
全部目標 = : 鏈接
目標連結 =
“目標”:“foo.o”,編譯(“酒吧”){...}目標編譯(名稱)=
"%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ } - 組裝策略由特殊規則決定,可用於確定是否需要重新組裝組裝目標。 如果連結到檔案的存在,則透過對應的符號(規則名稱的「目標」和檢查檔案的*檔案(「目標」))明確確定。
“目標”:“foo.o”,“bar.o”{...}
*檔案(「目標」):*檔案(「foo.o」),*檔案(「bar.o」){...}
- 開發人員可以定義組裝策略的任意屬性。 「*file」標誌是預設定義的(@{...} 表示抑制輸出,「exit 99」表示需要重建):
策略*檔案(檔案名稱)= @{
測試 -f %檔名 || 99號出口
對於 f,以 % 表示來源: opennet.ru