0x00 前言
文章中的文字可能存在语法错误以及标点错误,请谅解;
如果在文章中发现代码错误或其它问题请告知,感谢!
0x01 makefile函数调用语法
makefile函数调用原型:
$(<function> <arguments>)
#或
${<function> <arguments>}
函数的调用以$
开头,用{}
或者()
将函数名以及参数包含起来,<function>
为函数名,<arguments>
为参数,两者之间以空格分隔,若存在多个<arguments>
参数,使用,
分开。例如:
#subst函数作用是将字符串“maktfilt中”的't'替换为'e',其中函数名为subst ,参数为t,e,maktfilt
$(subst t,e,maktfilt)
0x02 wildcard函数
wildcard函数调用原型:
$(wildcard <PATTERN...>)
wildcard函数是针对通配符在函数或变量定义中展开无效情况下使用的,用于获取匹配该模式下的所有文件列表,<PATTERN...>
参数若有多个则用空格分隔。若没有找到指定的匹配模式则返回为空。
例如:
#返回make工作下的所有.cpp以及.c文件
$(wildcard *.cpp *.c)
0x03 patsubst函数
patsubst函数调用原型:
$(patsubst <pattern>,<replacement>,<text>)
patsubst函数返回被替换过后的字符串。patsubst函数判断<text>
中字符串(若多个字符串以空格分隔)是否匹配<pattern>
模式,若匹配则使用<replacement>
替换<text>
。<pattern>
可以包括通配符%
表示任意长度的字串。如果<replacement>
中也包含%,则<replacement>
中的这个%
将是<pattern>
中的那个%
所代表的字符串。若字符串中含有%
则可以用反斜杠\
来转义,即\%
来表示真实含义的%
字符。
示例:
#把字符串“x.c.c bar.c”符合模式%.c的单词替换成%.o,返回“x.c.o bar.o”。
$(patsubst %.c,%.o,x.c.c bar.c)
0x04 patsubst和wildcard举例
建立一个目录patsubst_wildcard_Demo
,新建a.c
、b.c
、makefile
文件,并建立一个子目录src
,在src
中新建src_a.c
、src_b.c
文件:
$ mkdir patsubst_wildcard_Demo
$ cd ./patsubst_wildcard_Demo
$ touch a.c
$ touch b.c
$ mkdir src
$ touch src_a.c
$ touch src_b.c
patsubst_wildcard_Demo
的tree目录如下:
.
├── a.c
├── b.c
├── makefile
└── src
├── src_a.c
└── src_b.c
编写makefie文件内容如下:
DIR_SRC = ./src
SRC_NONE =$(DIR_SRC)/*.c *.c
SRC_WILDCARD = $(wildcard $(DIR_SRC)/*.c *.c)
OBJ_NONE_NONE = $(patsubst %.c,%.o,$(DIR_SRC)/*.c *.c)
OBJ_WILDCARD_NONE = $(patsubst %.c,%.o,$(wildcard $(DIR_SRC)/*.c *.c))
OBJ_NONE = $(patsubst %.c,%.o,$(SRC_NONE))
OBJ_WILDCARD = $(patsubst %.c,%.o,$(wildcard $(SRC_WILDCARD)))
all:
@echo $(SRC_NONE)
@echo $(SRC_WILDCARD)
@echo $(OBJ_NONE_NONE)
@echo $(OBJ_WILDCARD_NONE)
@echo $(OBJ_NONE)
@echo $(OBJ_WILDCARD)
输出:
$ make
./src/src_a.c ./src/src_b.c a.c b.c
./src/src_a.c ./src/src_b.c a.c b.c
./src/*.o *.o
./src/src_a.o ./src/src_b.o a.o b.o
./src/*.o *.o
./src/src_a.o ./src/src_b.o a.o b.o
可以看出,由于通配符*
在函数定义中展开无效,所以OBJ_NONE
在使用patsubst
函数后echo
的输出为./src/*.o *.o
。而在OBJ_WILDCARD
中使用wildcard
函数使得通配符正确展开,最后echo
输出了正确结果。
该Demo项目已经上传至github:https://github.com/fyw4/patsubst_wildcard_Demo
在参考文档2中列出了make所支持的函数,在编写makefile文件时可以参考。
以上。
参考文档:
1.https://blog.csdn.net/iam_charlie/article/details/6915002
2.https://cloud.tencent.com/developer/article/1406069
3.https://blog.csdn.net/rudyn/article/details/7565390
今天的文章【makefile笔记】patsubst和wildcard函数使用小结分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/8377.html