###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"