在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTERN…) 。在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。需要注意的是:这种情况下规则中通配符的展开和上一小节匹配通配符的区别。

一般我们可以使用 “$(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

Makefile中的wildcard patsubst相关推荐

  1. Makefile中的wildcard用法

    Makefile中的wildcard用法 在Makefile规则中,通配符会被自动展开.但在变量的定义和函数引用时,通配符将失效.这种情况下如果需要通配符有效,就需要使用函数"wildcar ...

  2. makefile中的wildcard 、patsubst、

    在Makefile规则中,通配符会被自动展开.但在变量的定义和函数引用时,通配符将失效. 这种情况下如果需要通配符有效,就需要使用函数"wildcard",它的用法是:$(wild ...

  3. MAKEFILE【4】-Makefile中的wildcard用法

    文章目录 前言 前言 语法: $(wildcard PATTERN...) 在Makefile中,它被展开为已经存在的.使用空格分开的.匹配此模式的所有文件列表 一般我们可以使用"$(wil ...

  4. makefile中的wildcard

    wildcard : 扩展通配符 例子: 建立一个测试目录,在测试目录下建立一个名为sub的子目录 $ mkdir test $ cd test $ mkdir sub 在test下,建立a.c和b. ...

  5. makefile中常用函数

    Linux下编译c/c++源码需要编写makefile文件,文章参看 http://blog.sina.com.cn/s/blog_4c4d6e74010009jr.html 一函数的调用语法 二字符 ...

  6. Makefile中的常用函数subst、foreach、wildcard、notdir、patsubst

    Makefile中函数参数间以逗号分隔,函数名和参数间以空格分隔,$ 是取值符号,$val相当于获取val变量的值. subst函数的调用语法 subst FROM, TO, TEXT 即将字符串TE ...

  7. makefile 中 wildcard、notdir、patsubst、addprefix 解释

    原文链接:https://blog.csdn.net/huofire001/article/details/83684446 目录 wildcard 获取跟当前模式匹配的文件名 查找一层目录 查找多层 ...

  8. Makefile中的常用函数——wildcard,patsubst,filter

    Makefile中的常用函数 wildcard 提取文件用 #拿到DIR指定目录的所有文件 SRC = $(wildcard $(DIR)) #拿到当前文件夹下的 *.cpp 文件 src=$(wil ...

  9. makefile中的patsubst、notdir、wildcard介绍以及用法

    1.1 patsubst:模式替换函数 格式:格式:$(patsubst pattern, replacement, text) 功能:查找text中的单词(单词以"空格".&qu ...

最新文章

  1. 我爱计算机视觉干货集锦分类汇总(2019年3月9日)
  2. 大神交流经验!浙大吴飞与贾扬清经典十问!
  3. 使用swagger作为restful api的doc文档生成
  4. mongodb索引生成HTML页面,mongodb高阶:索引创建、聚合查询、复制集、分片、创建备份和部署...
  5. 硬盘故障时如何强制关机:Input/output error
  6. git版本回退(回退提交到本地仓库代码)
  7. Hadoop程序打印调试
  8. 常用推荐算法(50页干货)
  9. 高通QCA9377 WiFi蓝牙模块芯片介绍
  10. 互联网晚报 | 7月16日 星期六 |抖音回应“外卖功能上线”;上半年国内生产总值同比增长2.5%;雷军8月将携小米工程样车亮相...
  11. WinRAR 设置默认密码
  12. static taint IoT vul location
  13. android app跳转淘宝客户端店铺
  14. html5人脸拼图,layout拼图
  15. 120G+训练好的word2vec模型(中文词向量)
  16. html2canvas苹果不显示图片,解决html2canvas在苹果手机上不调用问题
  17. 斯坦福博士退学,在 3 个领域改变世界,科技狂人马斯克的巅峰之路
  18. 手Q体验不满意的地方之(3)——个人设置栏
  19. 【号外】软银为何忍痛割爱卖阿里股份?
  20. [ github ] 使用GitHub

热门文章

  1. 基于OpenCV实现对图片及视频中感兴趣区域颜色识别
  2. 用R studio读取excel的数据画散点图
  3. 网络小说之最:有些完全妹想到(根据橙瓜数据整理)
  4. Java阶段小结_1
  5. 苹果几最好用_苹果树一般用什么肥料最好?既不会让土地硬化,还能保持土壤有机质?...
  6. 视通科技分布式系统应用于高速指挥中心
  7. python3 urlparse_Python3的URL解析库urlparse
  8. Python urlparse模块介绍
  9. DirectUI实现原理
  10. 二、基于wifi控制的智能家居系统之项目效果图