得到指定路徑下源文件名稱集合
依次循環取得各目錄下的所有源文件,在各目錄下取源文件時過濾不支持的源文件格式,
得到源文件集合(帶路徑)
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”
。