origin
函數(shù)的作用是告訴你變量是哪里來的辈双,其出生狀況如何,他并不改變變量馏段。
函數(shù)語法:
$(origin <variable>)
<variable> 為變量的名字轩拨,而不是引用,所以一般沒有"$"字符在前院喜。
origin 函數(shù)通過返回值來告訴你 <variable> 的出生情況亡蓉。下面用實例說明:
- 當(dāng)從來未定義過該變量時,origin 函數(shù)返回 "undefined" 喷舀。
如下面的 Makefile 代碼:
all:
@echo $(origin V)
運行輸出:
$ make
undefined
- 如果該變量為環(huán)境變量砍濒,那么返回 "enviroment" 淋肾。
如下面的 Makefile 代碼:
all:
@echo $(origin USER)
運行輸出:
$ make
environment
其中 USER 這個變量為系統(tǒng)定義的當(dāng)前用戶,使用 env 命令可以看到爸邢。
- 如果變量是個默認(rèn)定義樊卓,那么返回 "default"。
如下面的 Makefile 代碼:
all:
@echo $(origin CC)
運行輸出:
$ make
default
- 如果一個變量被定義在 Makefile 文件中杠河,那么返回 "file" 碌尔。
如下面的 Makefile 代碼:
V := 1
all:
@echo $(origin V)
運行輸出:
$ make
file
- 如果變量來自命令行,那么返回 "command line" 券敌。
如下面的 Makefile 代碼:
all:
@echo $(origin MyVar)
運行方法:
$ make MyVar="Are you ok?"
command line
- 如果變量被 override 被重新定義過唾戚,那么返回 "override"。
如下面的 Makefile 代碼:
override SHELL = /bin/sh
all:
@echo $(origin SHELL)
運行輸出:
$ make
override
上面待诅,SHELL 原本是個環(huán)境變量叹坦,但在 Makefile 里被 override 指示符重定義過。
- 如果變量是自動化變量(如
< 等)咱士,那么返回 "automatic" 立由。
如下面的 Makefile 代碼:
all:
@echo $(origin @)
運行輸出:
$ make
automatic