###makefile获取依赖的源文件
<p>代码:
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,稍微修改了下。
###UPDATE
-
上面的代码
exclude="_test" #exclude="___" src=$(wildcard *[^$(exclude)].c ./subs/*.c)
<p>其实有点问题,`*[^$_test].c`这个正则只能过滤.c之前是'_','t','e','s'这4个字符的文件名,达不到想要的目的。 需要修改一下,对src进行替换
$(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"