12 GNU make的特點
這裡是GNU make的特點的總結,用於比較其它版本的make。我們以4.2 BSD 中的make的特點為基準。如果您要編寫一個
可移植的makefile檔案,您不要使用這裡列出的make的特點,也不要使用不相容性和失去的特點中列出的內容。
• 許多特點在System V 中的make也存在。
• 變數VPATH 以及它特殊的意義。參閱在目錄中搜尋先決條件。這個特點存在於System V 中的make,但沒有事實
證明。4.3 BSD make也含有該特點(據說是模仿System V中變數VPATFH的特點)。
• 引入(include)其它makefile檔案。參閱引入(include)其它makefile檔案。允許使用一個指令引入(include)多個檔案是
GNU的展開。
• 透過環境,變數可以讀入和通訊,參閱環境變數。
• 透過變數MAKEFLAGS 在遞迴make時可以傳遞選項。參閱和子make通訊選項。
• 在檔案引用中自動變數$% 設定為成員名。參閱自動變數。
• 自動變數$@, $*, $<, $%, 和 $? 有變體形式如$(@F)和$(@D)。我們把此概念化,並使用它對自動變數$^ 進行了明
顯展開。參閱自動變數。
• 變數引用。參閱變數引用基礎。
• 命令行選項‘-b'和‘-m',接受和忽略。在System V make中,這些選項實際起作用。
• 即使指定選項‘-n',‘-q'或‘-t',也能透過變數MAKE執行地歸呼叫make的命令。參閱遞迴make。
• 在後置規則(suffix rule)中支援後置‘.a'。參閱用於資料庫檔案的後置規則(suffix rule)。這個特點在GNU make中幾
乎不用,因為規則鏈更加通用的特點(參閱隱含規則鏈)允許一個樣式規則用於在檔案中安裝成員已經足夠
(參閱用於資料庫成員目標的隱含規則)。
在命令中行排列和反斜線(\)-新行結合依舊保留,當命令列印時,它們出現的格式和它們在makefile檔案中基本一樣,
不同之處是去掉了初始化空白。
• 下面的特點被各種不同版本的make吸收,但哪些版本吸收了哪些特點並不十釐清楚。
• 在樣式規則中使用‘%’。已經有幾個不同版本的make使用了該特點。我們不能確認是誰發明了它,但它發展很
快。參閱定義與重新定義樣式規則。
• 規則鏈以及隱含中間檔案。這個特點首先由Stu Feldman 在它的make版本中實現,並用於AT&T 第八版Unix研究
中。後來AT&T貝拉實驗室的Andrew Hume 在它的mk程式中應用(這裡稱為“傳遞閉合”)。我們並不清楚是從
他們那裡得到這個特點或是同時我們自己開發出來的。參閱隱含規則鏈。
• 自動變數引入(include)當前目標的所有先決條件的清單。我們一點也不知道是誰做的。參閱自動變數。自動變數$+
是變數$^的簡單展開。
• "what if" 標誌(GNU make中的‘-W') 是Andrew Hume 在mk中發明的。參閱代替執行命令。
• 並行執行的概念在許多版本的make中存在,儘管System V 或BSD 並沒有實現。參閱執行命令。
• 使用格式替換改變變數引用來自於SunOS 4。參閱變數引用基礎。在GNU make中,這個功能在變換語法和SunOS
4兼容之前由函數patsubst提供。不知道誰是威權,因為GNU make 使用函數 patsubst 在 SunOS 4 發布之前。
• 在命令行前面的‘+’字符有特殊重要的意義(參閱代替執行命令)。 這是由IEEE Standard 1003.2-1992
(POSIX.2)定義的。
• 使用‘+=語法為變數追加值來自於SunOS 4 make。參閱為變數值附加文字(text)。
• 語法‘archive(mem1 mem2...)'在單一資料庫檔案中列舉多個成員來自於SunOS 4 make.。參閱資料庫成員目標。
-include指令包括makefile檔案,並且對於不存在的檔案也不產生錯誤。該特點with來自於SunOS 4 make。(但是SunOS 4
make 在單個指令中指定多個makefile檔案。) 該特點和SGI make 的sinclude 相同,
• 剩餘的特點是由GNU make發明的︰
• 使用‘-v'或`--version'選項列印版本和拷貝權訊息。
• 使用‘-h' 或‘--help' 選項總結make的選項。
• 簡單展開型變數。參閱變數的兩特特色。
• 在遞迴make時,透過變數MAKE自動傳遞命令行變數。參閱遞迴make。
• 使用命令選項‘-C' 或‘--directory'改變路俓(stem)。參閱選項概要。
• 定義多行變數。參閱定義多行變數。
• 使用特殊目標.PHONY聲明假想(phony)目標。AT&T 貝拉實驗室Andrew Hume 使用不同的語法在它的mk程式中也
實現了該功能。這似乎是並行的發現。參閱假想(phony)目標。
• 呼叫函數操作文字(text)。參閱用於轉換文字(text)的函數。
• 使用‘-o'或‘--old-file'選項假裝檔案是舊檔案。參閱避免重新編譯檔案。