makefile获取依赖的源文件

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