makefile源文件收集

得到指定路徑下源文件名稱集合

依次循環取得各目錄下的所有源文件,在各目錄下取源文件時過濾不支持的源文件格式,
得到源文件集合(帶路徑)

SOURCES := $(foreach x,${SRC_DIR},\
       $(wildcard  \
       $(addprefix  ${x}/*,${SFIX}) ) )
例:
OS = ./plus        --------------------------------- .c文件所在目錄
OS_C := $(foreach x,${OS},\   ----------------得到該目錄下所有的 .c 文件
      $(wildcard  \
      $(addprefix  ${x}/*,.c) ) )

解釋以下makefile中的函數:
1、foreach:
foreach是用來做循環用的,類似於for 語句,語法是:$(foreach ,, )
意思:把參數中的單詞逐一取出放到參數所指定的變量中,然後再執行所包含的表達式。每一次會返回一個字符串,循環過程中,的所返回的每個字符串會以空格分隔,最後當整個循環結束時,所返回的每個字符串所組成的整個字符串(以空格分隔)將會是foreach函數的返回值。所以,最好是一個變量名,可以是一個表達式,而中一般會使用這個參數來依次枚舉中的單詞。
例:

names := a b c d
files := $(foreach n,$(names),$(n).o)

$(name)中的單詞會被挨個取出,並存到變量“n”中,“$(n).o”每次根據“$(n)”計算出一個值,這些值以空格分隔,最後作爲foreach函數的返回,所以,$(files)的值是“a.o b.o c.o d.o”

2、wildcard:
使用wildcard得到指定目錄下所有的C語言源程序文件名的方法,不用手工一個一個指定需要編譯的.c文件了,方法如下:

SRC = $(wildcard *.c)
  等於指定編譯當前目錄下所有.c文件,如果還有子目錄,比如子目錄爲inc,則再增加一個wildcard函數:
SRC = $(wildcard *.c) $(wildcard inc/*.c)

也可以指定彙編源程序:

ASRC = $(wildcard *.S)

3、addprefix:
功能:$(addprefix , ) ,加前綴函數,把前綴加到中的每個單詞前。
返回:返回加過前綴的文件名序列。
例:$(addprefix src/,foo bar)返回值是“src/foo src/bar”

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