makefile 中函式的呼叫格式如下:
$(function arguments)
其中,function 為函式名,arguments 為引數。
函式名與引數之間由空格或tab分隔,如果有多個引數,這些引數之間由逗號分隔。
核心的 makefile 中用到大量的函式,以下介紹一些常用的函式。
其中,subst 為 substitude(v 替代) 的縮寫。
功能:在字串 text 中,使用 to 替換每一處 from.
返回:替換過後產生的新的字串。
舉例:$(subst ee,ee,feet on the street)
返回結果:feet on the street
其中,patsubst 為 pattern 和 substitude 的縮寫。
功能:查詢 text 中的單詞(單詞以「空格」、「tab」或「回車」「換行」分隔)是否符合模式 pattern ,如果匹配的話,則以 replacement 替換。這裡, pattern 可以包括萬用字元「%」,表示任意長度的字串。如果 replacement 中也包含「%」,那麼, replacement 中的這個「%」將是 pattern 中的那個「%」所代表的字串。(可以用「\」來轉義,以「\%」來表示真實含義的「%」字元)。
返回:替換過後產生的新的字串。
舉例:$(patsubst %.c,%.o,x.c.c bar.c)
返回結果:x.c.o bar.o
一種更為簡單的批量替換檔案字尾的方法--變數的替換引用
$(var:pattern=replacement)
它相當於 $(patsubst pattern,replacement,$(var))
舉例:假設有變數定義為「objects = foo.o bar.o baz.o」。為了得到這些.o檔案所對應的.c原始檔。我們可以使用以下兩種方式的任意乙個:
$(objects:.o=.c)
$(patsubst %.o,%.c,$(objects))
strip意為「脫去」
功能:去除 string 中前導和結尾的空格,並將中間的多個空格壓縮為乙個空格。
返回:脫掉冗餘空格之後的新的字串。
舉例:$(strip a b c )
返回結果:a b c
功能:在字串 in 中搜尋 find ,如果找到,則返回值是傳入的引數 find, 否則返回值為空。
舉例:$(findstring a,a b c)
返回結果:a
舉例:$(findstring a,b c)
返回結果:
功能:過濾掉 text 中不符合 pattern 的字串
舉例:$(filter %.c %.s,foo.c bar.c baz.s ugh.h)
返回結果:foo.c bar.c baz.s
功能:$(filter pattern…,text) 的反函式,過濾掉 text 中符合 pattern 的字串。
舉例:$(filter %.c %.s,foo.c bar.c baz.s ugh.h)
返回結果:ugh.h
功能:將 list 中的單詞以首字母為準進行公升序排序,並去掉重複的單詞。
舉例:$(sort foo bar lose foo)
返回結果:bar foo lose
功能:從檔名序列 names… 中取出各個檔名的目錄部分。檔名的目錄部分就是包含在檔名中的最後乙個斜線(「/」)(包括斜線)之前的部分。如果沒有反斜槓,那麼返回./。
舉例:$(dir src/foo.c hacks)
返回結果:src/ ./
注意:以上例子中其實是兩個檔案 src/foo.c 和 ./hacks
功能:從檔名序列 names 中取出非目錄部分。非目錄部分是指最後乙個反斜槓(/)之後的部分,即檔名。
舉例:$(notdir src/foo.c hacks)
返回結果:foo.c hacks
功能:抽取 names 中每乙個檔名中除字尾外的一切字元。
舉例:$(basename src/foo.c src-1.0/bar hacks)
返回結果:src/foo src-1.0/bar hacks
功能:新增字尾。
舉例:$(addsuffix .c foo bar)
返回結果:foo.c bar.c
功能:把字首 prefix 加到 names 中的每個單詞後面
舉例:$(addprefix src/,foo bar)
返回結果:src/foo src/bar
功能:把引數 list 中的單詞逐一取出放到引數 var 所指定的變數中,然後再執行 text 所包含的表示式。每一次 text 會返回乙個字串,迴圈過程中, text 的所返回的每個字串會以空格分隔,最後當整個迴圈結束時, text 所返回的每個字串所組成的整個字串(以空格分隔)將會是foreach函式的返回值。
舉例:names := a b c d
files := $(foreach n,$(names),$(n).o)
返回結果:a.o b.o c.o d.o
或是 $(if condition,then-part,else-part)
功能:if 函式可以包含 else 部分,或是不含。即 if 函式的引數可以是兩個,也可以是三個。 condition 引數是 if 的表示式,如果其返回的為非空字串,那麼這個表示式就相當於返回真,於是, then-part 會被計算,否則 else-part 會被計算。
而 if 函式的返回值是,如果 condition 為真(非空字串),那個 then-part 會是整個函式的返回值,如果 condition 為假(空字串),那麼 else-part 會是整個函式的返回值,此時如果 else-part 沒有被定義,那麼,整個函式返回空字串。
所以, then-part 和 else-part 只會有乙個被計算。
功能:origin函式不像其它的函式,他並不操作變數的值,他只是告訴你你的這個變數是**來的?
注意, variable 是變數的名字,不應該是引用。所以你最好不要在 variable 中使用$ 字元。origin 函式會以其返回值來告訴你這個變數的「出生情況」。
返回值:
undefined如果 variable 從來沒有定義過,origin 函式返回這個值。
default如果 variable 是乙個預設的定義,比如「cc」這個變數。
environment如果 variable 是乙個環境變數,並且當 makefile 被執行時, -e 引數沒有
被開啟。
file如果 variable 這個變數被定義在 makefile 中。
command line如果 variable 這個變數是被命令列定義的。
override如果 variable 是被 override 指示符重新定義的。
automatic如果 variable 是乙個命令執行中的自動化變數。
功能:相當於在 shell 中執行 command argument。
makefile常用函式
一 字串處理函式 1.subst from,to,text 函式名稱 字串替換函式 subst。函式功能 把字串 text 中的 from 字元替換為 to 返回值 替換後的新字串。2.patsubst pattern,replacement,text 函式名稱 模式替換函式 patsubst。函式...
Makefile 常用函式
1.strip 去空格函式 刪除字串開頭和結尾的空格 2.比較函式ifeq 和ifneq ifeq是當相等時繼續執行,ifneq 當不等是繼續執行。ifneq strip target vendor target vendor 去除空格後不為空,product list target product...
Makefile常用函式
單詞以 空格 tab 或 回車 換行 分隔 info 列印資訊。warning 列印警告資訊。error 答應錯誤資訊並停止make。shell 返回值是shell命令的標準輸出。call 建立新的引數化的函式。eval 將的內容作為makefile的一部分而被make解析和執行。sort 給字串中...