makefile 中的 wildcard,foreach 與 patsubst 函數 .

http://www.cnblogs.com/beauty/archive/2011/01/11/1932549.html


makefile 裏的函數跟它的變量很相似——使用的時候,你用一個 $ 符號跟開括號,函數名,空格後跟一列由逗號分隔的參數,最後 用關括號結束。例如,在 GNU Make 裏有一個叫 'wildcard' 的函 數,它有一個參數,功能是展開成一列所有符合由其參數描述的文 件名,文件間以空格間隔。你可以像下面所示使用這個命令: 
     
    SOURCES = $(wildcard *.c) 
     
    這行會產生一個所有以 '.c' 結尾的文件的列表,然後存入變量 SOURCES 裏。當然你不需要一定要把結果存入一個變量。 
    另一個有用的函數是 patsubst ( patten substitude, 匹配替 換的縮寫)函數。它需要3個參數——第一個是一個需要匹配的式樣,第二個表示用什麼來替換它,第三個是一個需要被處理的 由空格分隔的字列。例如,處理那個經過上面定義後的變量, 
     
    OBJS = $(patsubst %.c,%.o,$(SOURCES)) 
     
    這行將處理所有在 SOURCES 字列中的字(一列文件名),如果它的 結尾是 '.c' ,就用 '.o' 把 '.c' 取代。注意這裏的 % 符號將匹 配一個或多個字符,而它每次所匹配的字串叫做一個‘柄’(stem) 。 在第二個參數裏, % 被解讀成用第一參數所匹配的那個柄。


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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章