###makefile獲取依賴的源文件code
<p>代碼:blog
exclude="_test" #exclude="___" src=$(wildcard *[^$(exclude)].c ./subs/*.c) dir=$(notdir $(src)) obj=$(patsubst %.c,%.o,$(dir) ) all: @echo $(src) @echo $(dir) @echo $(obj) @echo "end"
wildcard
經過通配符來匹配文件並將結果展開,第一個參數排除了_test.c
的文件。notdir
去掉src中的目錄,只保留文件名patsubst
進行替換,把.c
換成.o
<p>上面代碼參考[Makefile中的wildcard用法][1]這篇blog,稍微修改了下。test
###UPDATEfile
上面的代碼makefile
exclude="_test" #exclude="___" src=$(wildcard *[^$(exclude)].c ./subs/*.c)
<p>其實有點問題,`*[^$_test].c`這個正則只能過濾.c以前是'_','t','e','s'這4個字符的文件名,達不到想要的目的。 須要修改一下,對src進行替換di
$(patsubst %_test.c,, $(src))
這樣就把文件列表中含_test.c的去掉了。修改後爲文件
src :=$(wildcard *.c ./subs/*.c) src :=$(patsubst %_test.c,,$(src)) dir :=$(notdir $(src)) obj :=$(patsubst %.c,%.o,$(dir) ) all: @echo $(src) @echo $(dir) @echo $(obj) @echo "end"