Makefile获取依赖的源文件

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
exclude="_test"
#exclude="___"
src=$(wildcard *[^$(exclude)].c ./subs/*.c)

files=$(notdir $(src))

obj=$(patsubst %.c,%.o,$(files) )

all:
@echo $(src)
@echo $(files)
@echo $(obj)
@echo "end"

wildcard通过通配符来匹配文件并将结果展开,第一个参数排除了_test.c的文件。
notdir去掉src中的目录,只保留文件名
patsubst进行替换,把.c换成.o
上面代码参考Makefile中的wildcard用法这篇blog,稍微修改了下。

UPDATE

上面的代码

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

其实有点问题,*[^$test].c这个正则只能过滤.c之前是’‘,’t’,’e’,’s’这4个字符的文件名,达不到想要的目的。
需要修改一下,对src进行替换

$(patsubst %_test.c,, $(src))

这样就把文件列表中含_test.c的去掉了。修改后为

1
2
3
4
5
6
7
8
9
10
11
12
src :=$(wildcard *.c ./subs/*.c)
src :=$(patsubst %_test.c,,$(src))

files :=$(notdir $(src))

obj :=$(patsubst %.c,%.o,$(files) )

all:
@echo $(src)
@echo $(files)
@echo $(obj)
@echo "end"
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2015-2024 RivenZoo
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信