1.
environment:
當執行 make 的 shell 程序的環境表中定義相關變數(export)。
或者說 make 程序環境變數表,因為 make 程序是 shell 程序 fork 而出,其繼承於 shell 的環境表。
2.command:
當執行 make 的命令列中定義相關變數(作為引數)。
3.makefile:
makefile 中定義相關變數。
如果有同乙個變數同時被以上三種方式定義,並且變數值互不相同,那按誰定義的為準呢?誰優先順序高呢?
var
=in makefile
all:
@echo $(var)
例一:
同時通過以下三種方式定義變數var:
1)環境變數定義:make 命令前的 var=」in environment」
2)命令引數定義:make 命令後的 var=」in command」
3)命令指令碼定義:makefile 檔案中的 var = in makefile
執行結果如下:
結論:2)命令引數定義優先順序最高。
例二:同時通過以下兩種方式定義變數var:
1)環境變數定義:make 命令前的 var=」in environment」
2)命令指令碼定義:makefile 檔案中的 var = in makefile
執行結果如下:
結論:2)命令指令碼定義優先順序高於環境變數定義
例三:修改 makefile:(刪除var變數定義)
all:
@echo
$(var)
執行結果如下:
結論:當引用某變數而此變數未在命令引數中定義且未在 makefile 中定義時,則嘗試從 make 程序的環境表中 search。
總結:首先,make 命令引數定義的優先順序最高,可以覆蓋 make 程序環境表及 makefile 指令碼定義。
其次,makefile 指令碼定義變數中等,在沒有 make 命令引數定義指定變數時,其優先順序高於 make 程序環境表。
最後,make 程序環境表定義最低,僅當指定變數在 make 命令引數及 makefile 中都未定義時,才被使用。
是否可以修改變數定義的優先順序?
當然可以。
例如,可以通過 make 的 -e 引數來將 make 環境表定義優先順序提高到 makefile 定義之上。
但是,-e 引數無法提高優先順序到最高:
可見,即使 make 時新增 -e 引數,其優先順序還是低於 make 命令引數定義優先順序。
參見 man make 手冊:
give variables taken from
the environment precedence over variables from makefiles. 後記
makefile 可以巢狀呼叫,此時,make 可達的變數,又該以怎樣的方式傳入子 makefile 中呢?優先順序如何呢?
^_^
makefile變數的定義
一 變數名 makefile變數名是不包括 前置空白和尾空白的任何字串。1 變數名最好由字母 數字和下劃線組成 儘管在gnu make中沒有對變數的命名有其它的限制,但是字母 數字和下劃線以外的字元 可能會在make的後續版本中被賦予特殊的含義。2 變數名大小寫敏感 3 變數名中可以包含函式或者其它...
MakeFile預定義變數
makefile中常見預定義變數 命 令 格 式 含 義 ar庫檔案維護程式的名稱,預設值為ar as匯程式設計序的名稱,預設值為as ccc編譯器的名稱,預設值為cc cppc預編譯器的名稱,預設值為 cc e cxxc 編譯器的名稱,預設值為g fcfortran編譯器的名稱,預設值為f77 r...
Makefile預定義變數
含義 不包含副檔名的目標檔名稱。所有的依賴檔案,以空格分開,並以出現的先後為序,可能包含重複的依賴檔案。第乙個依賴檔案的名稱。所有的依賴檔案,以空格分開,這些依賴檔案的修改日期比目標的建立日期晚。目標的完整名稱。所有的依賴檔案,以空格分開,不包含重複的依賴檔案。如果目標是歸檔成員,則該變數表示目標的...