Makefile的origin 函數

轉自:http://blog.chinaunix.net/uid-22028680-id-3054167.html

origin 函數的作用是告訴你變量是哪裏來的,其出生狀況如何,他並不改變變量。其語法是:

$(origin VAR),其中VAR爲變量的名字,而不是引用,所以一般沒有 $ 字符在前。origin 函數通過返回值來告訴你 的出生情況。

下面用實例說明:

1. 當從來未定義過該變量時,origin 函數返回 "undefined" 。如下面的 Makefile 代碼:

all:
        @echo $(origin V)

運行輸出:

$ make
undefined

2. 如果該變量爲環境變量,那麼返回 "enviroment" 。如下面的 Makefile 代碼:

all:
     @echo $(origin USER)

運行輸出:

$ make
environment

3. 如果一個變量被定義在 Makefile 文件中,那麼返回 "file" 。如下面的 Makefile 代碼:

V := 1
all:
     @echo $(origin V)

運行輸出:

$ make
file

4. 如果變量來自命令行,那麼返回 "command line" 。如下面的 Makefile 代碼:

all:
     @echo $(origin MyVar)

運行方法:

$ make MyVar="Are you ok?"
command line

5. 如果變量被 override 被重新定義過,那麼返回 "override"。如下面的 Makefile 代碼:

override SHELL = /bin/sh
all:
        @echo $(origin SHELL)

運行輸出:

$ make
override

6. 如果變量是自動化變量(如 $@, $< 等),那麼返回 "automatic" 。如下面的 Makefile 代碼:

all:
     @echo $(origin @)

運行輸出:

$ make
automatic

7. 如果變量是個默認定義,那麼返回 "default"。如下面的 Makefile 代碼:

all:
     @echo $(origin CC)

運行輸出:

$ make
default

這裏特別記錄一下makefile中預定義的變量

預定義變量的含義:

$*  不包含擴展名的目標文件名稱。

$+   所有的依賴文件,以空格分開,並以出現的先後爲序,可能包含重複的依賴文件。
$<  第一個依賴文件的名稱。
$?  所有的依賴文件,以空格分開,這些依賴文件的修改日期比目標的創建日期晚。
$@   目標的完整名稱。
$^   所有的依賴文件,以空格分開,不包含重複的依賴文件。
$%  如果目標是歸檔成員,則該變量表示目標的歸檔成員名稱。例如,如果目標名稱爲

test.so(test.o),則 $@ 爲 test.so,而 $% 爲 test.o。
AR      歸檔維護程序的名稱,默認值爲 ar。
ARFLAGS  歸檔維護程序的選項。
AS     彙編程序的名稱,默認值爲 as。
ASFLAGS  彙編程序的選項。
CC     C 編譯器的名稱,默認值爲 cc。
CFLAGS  C 編譯器的選項。
CPP     C 預編譯器的名稱,默認值爲 $(CC) -E。
CPPFLAGS C 預編譯的選項。
CXX     C++ 編譯器的名稱,默認值爲 g++。
CXXFLAGS C++ 編譯器的選項。




發佈了34 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章