免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
origin 函數(shù) -- 告知變量的出生情況

origin 函數(shù) -- 告知變量的出生情況



origin 函數(shù)的作用是告訴你變量是哪里來的,其出生狀況如何,他并不改變變量。其語法是:
$(origin <variable>)

上面,<variable> 為變量的名字,而不是引用,所以一般沒有 $ 字符在前。origin 函數(shù)通過返回值來告訴你 <variable> 的出生情況。下面用實(shí)例說明:

1. 當(dāng)從來未定義過該變量時(shí),origin 函數(shù)返回 "undefined" 。如下面的 Makefile 代碼:
all:
        @echo $(origin V)

運(yùn)行輸出:
$ make
undefined


2. 如果該變量為環(huán)境變量,那么返回 "enviroment" 。如下面的 Makefile 代碼:
all:
    @echo $(origin USER)

運(yùn)行輸出:
$ make
environment

其中 USER 這個(gè)變量為系統(tǒng)定義的當(dāng)前用戶,使用 env 命令可以看到。

3. 如果變量是個(gè)默認(rèn)定義,那么返回 "default"。如下面的 Makefile 代碼:
all:
    @echo $(origin CC)

運(yùn)行輸出:
$ make
default


4. 如果一個(gè)變量被定義在 Makefile 文件中,那么返回 "file" 。如下面的 Makefile 代碼:
V := 1
all:
    @echo $(origin V)

運(yùn)行輸出:
$ make
file


5. 如果變量來自命令行,那么返回 "command line" 。如下面的 Makefile 代碼:
all:
    @echo $(origin MyVar)

運(yùn)行方法:
$ make MyVar="Are you ok?"
command line


6. 如果變量被 override 被重新定義過,那么返回 "override"。如下面的 Makefile 代碼:
verride SHELL = /bin/sh
all:
        @echo $(origin SHELL)

運(yùn)行輸出:
$ make
override

上面,SHELL 原本是個(gè)環(huán)境變量,但在 Makefile 里被 override 指示符重定義過。

7. 如果變量是自動(dòng)化變量(如 $@, $< 等),那么返回 "automatic" 。如下面的 Makefile 代碼:
all:
    @echo $(origin @)

運(yùn)行輸出:
$ make
automatic

這些信息對(duì)于我們編寫Makefile是非常有用的,例如,假設(shè)我們有一個(gè)Makefile其包了一個(gè)定義文件Make.def,在Make.def中定義了一個(gè)變量“bletch”,而我們的環(huán)境中也有一個(gè)環(huán)境變量“bletch”,此時(shí),我們想判斷一下,如果變量來源于環(huán)境,那么我們就把之重定義了,如果來源于Make.def或是命令行等非環(huán)境的,那么我們就不重新定義它。于是,在我們的Makefile中,我們可以這樣寫:

    ifdef bletch

    ifeq "$(origin bletch)" "environment"

    bletch = barf, gag, etc.

    endif

    endif

當(dāng)然,你也許會(huì)說,使用override關(guān)鍵字不就可以重新定義環(huán)境中的變量了嗎?為什么需要使用這樣的步驟?是的,我們用override是可以達(dá)到這樣的效果,可是override過于粗暴,它同時(shí)會(huì)把從命令行定義的變量也覆蓋了,而我們只想重新定義環(huán)境傳來的,而不想重新定義命令行傳來的。
四、foreach 函數(shù)
 

foreach函數(shù)和別的函數(shù)非常的不一樣。因?yàn)檫@個(gè)函數(shù)是用來做循環(huán)用的,Makefile中的foreach函數(shù)幾乎是仿照于Unix標(biāo)準(zhǔn)Shell(/bin/sh)中的for語句,或是C-Shell(/bin/csh)中的foreach語句而構(gòu)建的。它的語法是:

 

    $(foreach <var>;,<list>;,<text>;)

 

這個(gè)函數(shù)的意思是,把參數(shù)<list>;中的單詞逐一取出放到參數(shù)<var>;所指定的變量中,然后再執(zhí)行<text>;所包含的表達(dá)式。每一次<text>;會(huì)返回一個(gè)字符串,循環(huán)過程中,<text>;的所返回的每個(gè)字符串會(huì)以空格分隔,最后當(dāng)整個(gè)循環(huán)結(jié)束時(shí),<text>;所返回的每個(gè)字符串所組成的整個(gè)字符串(以空格分隔)將會(huì)是foreach函數(shù)的返回值。

所以,<var>;最好是一個(gè)變量名,<list>;可以是一個(gè)表達(dá)式,而<text>;中一般會(huì)使用<var>;這個(gè)參數(shù)來依次枚舉<list>;中的單詞。舉個(gè)例子:
    names := a b c d

    files := $(foreach n,$(names),$(n).o)
上面的例子中,$(name)中的單詞會(huì)被挨個(gè)取出,并存到變量“n”中,“$(n).o”每次根據(jù)“$(n)”計(jì)算出一個(gè)值,這些值以空格分隔,最后作為foreach函數(shù)的返回,所以,$(files)的值是“a.o b.o c.o d.o”。

注意,foreach中的<var>;參數(shù)是一個(gè)臨時(shí)的局部變量,foreach函數(shù)執(zhí)行完后,參數(shù)<var>;的變量將不在作用,其作用域只在foreach函數(shù)當(dāng)中。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
GNU make中文手冊(cè)-第八章:make的內(nèi)嵌函數(shù)
內(nèi)核頂層Makefile相關(guān)2
Makefile之foreach 、wildcard 、patsubst 解析
Makefile 中變量的賦值
Makefile之 =, :=, ?=
Makefile詳解(二)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服