檔名操作函式
每個函式的引數字串都會被當做乙個或是一系列的檔名來對待。
$(dir )名稱:取目錄函式——dir。
功能:從檔名序列
中取出目錄部分。目錄部分是指最後乙個反斜槓(「/」)之前的部分。如果沒有反斜槓,那麼返回「./」。
返回:返回檔名序列
的目錄部分。
示例: $(dir src/foo.c hacks)返回值是「src/ ./」。
$(notdir )名稱:取檔案函式——notdir。
功能:從檔名序列
中取出非目錄部分。非目錄部分是指最後乙個反斜槓(「/」)之後的部分。
返回:返回檔名序列
的非目錄部分。
示例: $(notdir src/foo.c hacks)返回值是「foo.c hacks」。
$(suffix )名稱:取字尾函式——suffix。
功能:從檔名序列
中取出各個檔名的字尾。
返回:返回檔名序列
的字尾序列,如果檔案沒有字尾,則返回空字串。
示例: $(suffix src/foo.c src-1.0/bar.c hacks)返回值是「.c .c」。
$(basename )名稱:取字首函式——basename。
功能:從檔名序列
中取出各個檔名的字首部分。
返回:返回檔名序列
的字首序列,如果檔案沒有字首,則返回空字串。
示例: $(basename src/foo.c src-1.0/bar.c hacks)返回值是「src/foo src-1.0/bar hacks」。
$(addsuffix ,)名稱:加字尾函式——addsuffix。
功能:把字尾
加到中的每個單詞後面。
返回:返回加過字尾的檔名序列。
示例: $(addsuffix .c,foo bar)返回值是「foo.c bar.c」。
$(addprefix ,)名稱:加字首函式——addprefix。
功能:把字首
加到中的每個單詞後面。
返回:返回加過字首的檔名序列。
示例: $(addprefix src/,foo bar)返回值是「src/foo src/bar」。
$(join ,)名稱:連線函式——join。
功能:把
中的單詞對應地加到的單詞後面。如果的單詞個數要比的多,那麼, 中的多出來的單詞將保持原樣。如果的單詞個數要比多,那麼,
多出來的單詞將被複製到中。
返回:返回連線過後的字串。
示例: $(join aaa bbb ,
111222
333)返回值是「aaa111 bbb222 333」。
foreach函式:用來做迴圈用的
$(foreach,,)把引數中的單詞逐一取出放到引數所指定的變數中,然後再執行所包含的表示式。每一次會返回乙個字串,迴圈過程中, 的所返回的每個字串會以空格分隔,最後當整個迴圈結束時,
所返回的每個字串所組成的整個字串(以空格分隔)將會是 foreach 函式的返回值。
最好是乙個變數名, 可以是乙個表示式,而中一般會使用這個引數來依次列舉中的單詞。
names := a b c d
files := $(foreach n,$(names),$(n).o) //$(files)的值是「a.o b.o c.o d.o
注意, foreach 中的引數是乙個臨時的區域性變數, foreach 函式執行完後,引數的變數將不在作用,其作用域只在 foreach 函式當中
if函式:跟ifeq很像
$(if,) //引數是 if 的表示式,如果其返回的為非空字串,那麼這個表示式就相當於返回真,於是, 會被計算,否則會被計算
或是$(
if,,)
call函式:唯一乙個可以用來建立新的引數化的函式
$(call ,,,...)當 make 執行這個函式時, 引數中的變數,如$(1), $(2), $(3)等,會被引數, , 依次取代。而的返回值就是 call 函式的返回值。
eg:
reverse = $(1) $(2)foo =$(call reverse,a,b)
那麼, foo 的值就是「a b」。當然,引數的次序是可以自定義的,不一定是順序的,如:
reverse = $(2) $(1
)foo =$(call reverse,a,b)
此時的 foo 的值就是「b a」
origin函式:不操作變數的值,他只是告訴你你的這個變數是**來
的 。
$(origin )注意:是變數的名字,不應該是引用。所以你最好不要在中使用「$」字元。 origin函式會以其返回值來告訴你這個變數的「出生情況」,origin函式的返回值:
「undefined」 :如果從來沒有定義過, origin 函式返回這個值「undefined」。
「default」 :如果是乙個預設的定義,比如「cc」這個變數
「environment」 :如果是乙個環境變數,並且當 makefile 被執行時,「-e」引數沒有被開啟。
「file」 :如果這個變數被定義在 makefile 中。
「command line」 :如果這個變數是被命令列定義的。
「override」 :如果是被 override 指示符重新定義的。
「automatic」 :如果是乙個命令執行中的自動化變數。
跟我學Makefile(七)
定義模式規則 使用模式規則來定義乙個隱含規則。乙個模式規則就好像乙個一般的規則,只是在規則中,目標的定義需要有 字元。的意思是表示乙個或多個任意字元。在依賴目標中同樣可以使用 只是依賴目標中的 的取值,取決於其目標。有一點需要注意的是,的展開發生在變數和函式的展開之後,變數和函式的展開發生在make...
跟我學Makefile(三)
緊接著跟我學makefile 二 繼續學習 變數高階用法 1 變數值的替換 替換變數中的共有的部分,其格式是 var a b 或是 把變數 var 中所有以 a 字串 結尾 的 a 替換成 b 字串。這裡的 結尾 意思是 空格 或是 結束符 foo a.o b.o c.o bar foo o c 第...
跟我學XSL(五)
上期我們學習了xsl元素 xsl if 已能通過測試xml資料的值來決定不同的輸出形式 不知你嘗試過沒有,實際上 xsl for each 也可部分實現 xsl if 的功能 但有時,我們希望對同一資料同時測試多個條件,根據不同條件輸出相應結果。當然,我們可以用if,假如我們只有if可用的話。幸好我...