Makefile中的wildcard

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Makefile中的wildcard patsubst notdir ⽤法
⼀般我们可以使⽤“$(wildcard *.c)”来获取⼯作⽬录下的所有的.c⽂件列表。

复杂⼀些⽤法;可以使⽤“$(patsubst
%.c,%.o,$(wildcard *.c))”,⾸先使⽤“wildcard”函数获取⼯作⽬录下的.c⽂件列表;之后将列表中所有⽂件名的后缀.c替换为.o。

这样我们就可以得到在当前⽬录可⽣成的.o⽂件列表。

因此在⼀个⽬录下可以使⽤如下内容的Makefile来将⼯作⽬录下的所有的.c⽂件进⾏编译并最后连接成为⼀个可执⾏⽂件:
#sample Makefile
objects := $(patsubst %.c,%.o,$(wildcard *.c))
foo : $(objects)
cc -o foo $(objects)
这⾥我们使⽤了make的隐含规则来编译.c的源⽂件。

对变量的赋值也⽤到了⼀个特殊的符号(:=)。

1、wildcard : 扩展通配符
2、notdir :去除路径
3、patsubst :替换通配符
例⼦:
建⽴⼀个测试⽬录,在测试⽬录下建⽴⼀个名为sub的⼦⽬录
$ mkdir test
$ cd test
$ mkdir sub
在test下,建⽴a.c和b.c2个⽂件,在sub⽬录下,建⽴sa.c和sb.c2 个⽂件
建⽴⼀个简单的Makefile
src=$(wildcard *.c ./sub/*.c)
dir=$(notdir $(src))
obj=$(patsubst %.c,%.o,$(dir) )
all:
@echo $(src)
@echo $(dir)
@echo $(obj)
@echo "end"
执⾏结果分析:
第⼀⾏输出:
a.c
b.c ./sub/sa.c ./sub/sb.c
wildcard把指定⽬录 ./ 和 ./sub/ 下的所有后缀是c的⽂件全部展开。

第⼆⾏输出:
a.c
b.c sa.c sb.c
notdir把展开的⽂件去除掉路径信息
第三⾏输出:
a.o
b.o sa.o sb.o
在$(patsubst %.c,%.o,$(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o,
任何输出。

或者可以使⽤
obj=$(dir:%.c=%.o)
效果也是⼀样的。

这⾥⽤到makefile⾥的替换引⽤规则,即⽤您指定的变量替换另⼀个变量。

它的标准格式是
$(var:a=b) 或 ${var:a=b}
它的含义是把变量var中的每⼀个值结尾⽤b替换掉a。

相关文档
最新文档