close

$#  => 添加到Shell的参数个数 
if [ $# -eq 2 ] ; then
      //input  parametet number is 2
fi

 

$1~$n => 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

case $1 in

        ............................

esac

 

 

 

 

 

下述的條件語句的例子告訴make如果變數CC 的值是‘gcc’時使用一個資料庫,如不是
則使用其他資料庫。它通過控制選擇兩命令行之一作為該規則的命令來工作。‘CC=gcc’作為
make改變的參數的結果不僅用於決定使用哪一個編譯器,而且決定連接哪一個資料庫。
libs_for_gcc = -lgnu
normal_libs =
foo: $(objects)
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif

 

。有四種不同的指令用於測試不同的條件。
ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"

 

字串替換和分析函數

這裏有一些用於操作字串的函數:
$(subst from,to,text)


在文本‘text’中使用‘to’替換每一處‘from’。例如:
$(subst ee,EE,feet on the street)
         結果為‘fEEt on the strEEt’

$(patsubst pattern,replacement,text)
尋找‘text’中符合格式‘pattern’的字,用‘replacement’替換它們。這裏‘pattern’中包含通配符
‘%’,它和一個字中任意個數的字元相匹配。如果‘replacement’中也含有通配符‘%’,則這個‘%’
被和‘pattern’中通配符‘%’匹配的文本代替。在函數patsubst中的‘%’可以用反斜杠(‘\’)引用。
引用字元‘%’的反斜杠可以被更多反斜杠引用。引用字元‘%’和其他反斜杠的反斜杠在比較檔
案名或有一個stem(徑)代替它之前從格式中移出。使用反斜杠引用字元‘%’不會帶來其他
麻煩。例如,格式‘the\%weird\\%pattern\\'是‘the%weird\' 加上通配符‘%'然後和字串‘pattern\\'
連接。最後的兩個反斜杠由於不能影響任何統配符‘%’所以保持不變。在字之間的空格間被
壓縮為單個空格,前導以及結尾空格被丟棄。例如:
$(patsubst %.c,%.o,x.c.c bar.c)
的結果為:‘x.c.o bar.o'。

$(strip string)
去掉前導和結尾空格,並將中間的多個空格壓縮為單個空格。這樣,‘$(strip a b c )'結果為‘a
b c’。函數strip和條件語句連用非常有用。

 

$(findstring find,in)
在字串‘in’中搜尋‘find’,如果找到,則返回值是‘find’,否則返回值為空。您可以在一個條件
中使用該函數測試給定的字串中是否含有特定的子字串。這樣,下面兩個例子:
$(findstring a,a b c)
$(findstring a,b c)
將分別產生值‘a’和‘’。

 

$(filter pattern...,text)
返回在‘text’中由空格隔開且匹配格式‘pattern...’的字,對於不符合格式‘pattern...’的字移出。
格式用‘%’寫出,和前面論述過的函數patsubst的格式相同。函數filter可以用來變數分離類
型不同的字串。例如:
sources := foo.c bar.c baz.s ugh.h
foo: $(sources)
cc $(filter %.c %.s,$(sources)) -o foo
表明‘foo' 依靠‘foo.c',‘bar.c',‘baz.s' 和‘ugh.h';但僅有‘foo.c',‘bar.c' 和 ‘baz.s' 指明用命
令編譯。

 

$(filter-out pattern...,text)
返回在‘text’中由空格隔開且不匹配格式‘pattern...’的字,對於符合格式‘pattern...’的字移出。
只是函數filter的反函數。例如:
objects=main1.o foo.o main2.o bar.o
mains=main1.o main2.o
下面產生不包含在變數‘mains’中的OBJ檔的檔列表:
$(filter-out $(mains),$(objects))

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 kingsman 的頭像
    kingsman

    Kingsman的部落格

    kingsman 發表在 痞客邦 留言(0) 人氣()