網(wǎng)站開(kāi)發(fā)實(shí)訓(xùn)報(bào)告參考文獻(xiàn)國(guó)內(nèi)真正的永久免費(fèi)建站
目錄
一、foreach 函數(shù)
二、if 函數(shù)
三、call 函數(shù)
一、foreach 函數(shù)
????????foreach 函數(shù)和別的函數(shù)非常的不一樣。因?yàn)檫@個(gè)函數(shù)是用來(lái)做循環(huán)用的,Makefile 中的 foreach 函數(shù)幾乎是仿照于 Unix 標(biāo)準(zhǔn) Shell(/bin/sh)中的 for 語(yǔ)句,或是 C-Shell (/bin/csh)中的 foreach 語(yǔ)句而構(gòu)建的。它的語(yǔ)法是:
$(foreach?<var>,<list>,<text>)
????????這個(gè)函數(shù)的意思是,把參數(shù)<list>中的單詞逐一取出放到參數(shù)<var>所指定的變量中, 然后再執(zhí)行<text>所包含的表達(dá)式。每一次<text>會(huì)返回一個(gè)字符串,循環(huán)過(guò)程中, <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ù)來(lái)依次枚舉<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)中。
二、if 函數(shù)
????????if 函數(shù)很像 GNU 的 make 所支持的條件語(yǔ)句——ifeq(參見(jiàn)前面所述的章節(jié)),if 函數(shù) 的語(yǔ)法是:
$(if <condition>,<then-part>)
或是
$(if <condition>,<then-part>,<else-part>)
????????可見(jiàn),if 函數(shù)可以包含“else”部分,或是不含。即 if 函數(shù)的參數(shù)可以是兩個(gè),也可 以是三個(gè)。<condition>參數(shù)是 if 的表達(dá)式,如果其返回的為非空字符串,那么這個(gè)表達(dá)式 就相當(dāng)于返回真,于是,<then-part>會(huì)被計(jì)算,否則<else-part>會(huì)被計(jì)算。
????????而 if 函數(shù)的返回值是,如果(condition)為真(非空字符串),那個(gè)<then-part>會(huì)是整 個(gè)函數(shù)的返回值,如果<condition>為假(空字符串),那么<else-part>會(huì)是整個(gè)函數(shù)的返 回值,此時(shí)如果沒(méi)有被定義,那么,整個(gè)函數(shù)返回空字串。
????????所以,<then-part>和<else-part>只會(huì)有一個(gè)被計(jì)算。
三、call 函數(shù)
????????call 函數(shù)是唯一一個(gè)可以用來(lái)創(chuàng)建新的參數(shù)化的函數(shù)。你可以寫(xiě)一個(gè)非常復(fù)雜的表達(dá) 式,這個(gè)表達(dá)式中,你可以定義許多參數(shù),然后你可以用 call 函數(shù)來(lái)向這個(gè)表達(dá)式傳遞參 數(shù)。其語(yǔ)法是:
$(call <expression>,<pram1>,<pram2>,<pram3>...)
????????當(dāng) make 執(zhí)行這個(gè)函數(shù)時(shí),參數(shù)中的變量,如$(1),$(2),$(3)等,會(huì)被 參數(shù),,依次取代。而的返回值就是 call 函數(shù)的返回 值。例如:
reverse = $(1) $(2)
foo = $(call reverse,a,b)
????????那么,foo 的值就是“a b”。當(dāng)然,參數(shù)的次序是可以自定義的,不一定是順序的,
如:
reverse = $(2) $(1)
foo = $(call reverse,a,b)
此時(shí)的 foo 的值就是“b a”。