makefile获取依赖的源文件

makefile获取依赖的源文件

代码:

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

上面代码参考Makefile中的wildcard用法这篇blog,稍微修改了下。

UPDATE

  • 上面的代码

    exclude="_test"
    #exclude="___"
    src=$(wildcard *[^$(exclude)].c ./subs/*.c)
    

其实有点问题,*[^$_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"

你可能感兴趣的:(makefile)