Makefile中的wildcard用法

Makefile函数介绍 patsubst 函数被用来将名字列表 _text中符合 _pattern模式的名字替换为 _replacement,并将替换后的名字列表返回。addsuffix函数被用于给名字列表 _names中的每一个名字增加后缀 _suffix,并将增加了后缀 _suffix的名字列表返回。addprefix函数被用于给名字列表 _names中的每一个名字增加前缀 _prefix,并将增加了前缀的名字列表返回。filter函数被用于从一个名字列表 _text中根据模式 _pattern得到满足需要的名字列表并返回。 阅读详情

在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得到指定目录下所有的C语言源程序文件名的方法,这下好了,不用手工一个一个指定需要编译的.c文件了,方法如下:

SRC = $(wildcard *.c)

等于指定编译当前目录下所有.c文件,如果还有子目录,比如子目录为inc,则再增加一个wildcard函数,象这样:

SRC = $(wildcard *.c) $(wildcard inc/*.c)

也可以指定汇编源程序:
ASRC = $(wildcard *.S)

 

makefile 中 patsubst、notdir、wildcard函数解析 作用:在 Makefile 中模拟 Shell 的通配符(?[]),扫描文件系统,返回所有匹配 PATTERN 的文件 / 目录路径列表(多个结果用空格分隔)。关键特点如果没有匹配到任何内容,直接返回空字符串(不是null,是完全空);区别于普通的:Makefile 本身不解析通配符,必须用wildcard才能让生效。makefile作用:接收一个 / 多个路径字符串(空格分隔),去掉所有路径前缀,只保留「最后一级的文件名 / 目录名」。关键特点。 阅读详情

相关推荐

makefile函数makefile 常用函数汇总

makefile函数makefile 常用函数汇总

challenglistic的博客 7510

makefilewildcard的理解

wildcard 用来明确表示通配符。因为在 Makefile 里,变量实质上就是 C/C++ 中的宏,也就是说,如果一个表达式如 objs = *.o ,则 objs 的值就是 *.o ,而不是表示所有的 .o 文件。若果要使用通配符,那么就要使用 wildcard 来声明 * 这个符号,使 * 符号具有通配符的功能。如下举例: 在当前目录下随意建立两个 *.c 文件,如 hello.c 和 world.c ,现在编写一个 Makefile 如下: src = $(wildcard *.c /usr/sr

dianqicyuyan的博客 1万+

TOPCon vs PERC:2024年光伏电站投资,哪种技术更划算?

本文深入分析了2024年光伏电站投资中TOPCon与PERC技术的财务表现。通过对比初始系统成本、全生命周期发电量及环境适应性,指出当前TOPCon组件与PERC价差已显著缩小,其更高的转换效率和更低的衰减率能有效降低度电成本并提升项目内部收益率,为投资者提供更具长期价值的方案。

p5l2m9n4o6q的博客 242

makefilewildcard

这样我们就可以得到在当前目录可生成的.o文件列表。展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。假如不存在任何符合此模式的文件,函数会忽略模式字符并返回空。

lkdom 5064

Makefilewildcard使用方法

Makefilewildcard函数使用方法 Makefile用于管理工程编译,作为一种管理工具,内部包含相关处理函数,其中wildcard就是makefile文件中的一个函数。 一、wildcard作用 显示指定路径下指定文件类型的所有文件。 二、格式 $(wildcard 指定文件类型) 三、实例 图1 源文件结构 图2 wildcard实例 ...

小白蒋-材料转行芯片验证 5788

Makefile函数wildcard

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

felix_vip的专栏 3329

【ARM 嵌入式 编译 Makefile 系列 17 - Makefile 函数 wildcard 使用详细介绍】

wildcard函数Makefile中的一个内建函数,用于获取符合特定模式的文件名列表。例如,会获取当前目录下所有以.c为扩展名的文件列表。一个更具体的例子:假设我们有一个目录,其中包含多个C源文件,我们可以使用wildcard函数来获取这些源文件的列表,然后生成目标文件列表,并编写规则来编译这些源文件。all:在这个例子中,会获取所有.c文件,然后我们使用模式替换来生成所有.o文件。规则%.o: %.c表示每个.o文件都依赖于同名的.c文件。如果某个.c文件发生了改变,那么对应的.o。

CodingCos的博客 1944

Makefile 函数 wildcard 使用详细介绍】

wildcard函数Makefile中的一个内建函数,用于获取符合特定模式的文件名列表。例如,会获取当前目录下所有以.c为扩展名的文件列表。一个更具体的例子:假设我们有一个目录,其中包含多个C源文件,我们可以使用wildcard函数来获取这些源文件的列表,然后生成目标文件列表,并编写规则来编译这些源文件。allOBJSocgccc $o $@123456在这个例子中,会获取所有.c文件,然后我们使用模式替换来生成所有.o文件。规则%.o: %.c。

luoganttcc的博客 1220

wildcard函数详解

是GNU Make中的一个函数,它用于在Makefile中匹配指定模式的文件名,并返回所有匹配到的文件列表。这个函数在处理一组文件时非常有用,尤其是需要自动包含某个目录下所有特定类型的文件时。函数会搜索当前工作目录(通常是包含Makefile的目录)中所有与给定模式匹配的文件,并返回一个空格分隔的文件列表。函数只会在Makefile被解析时执行一次,因此如果后来创建了新的匹配文件,Makefile不会自动包含它们。是一个或多个文件名模式,可以是相对路径或绝对路径,可以使用通配符,如。(匹配任意字符序列),

weixin_41902493的博客 1729

Makefilewildcard、patsubst、notdir的含义

参考文章:Makefilewildcard的介绍

Dontla的博客 1337

【Arduino+ESP32专题】CP2102串口自动下载电路

CP2102串口自动下载电路原理是什么?

一点硬件 2900

基于APW7137升压模块电路设计资料 包含AD原理图及pcb文件

基于APW7137升压模块电路设计资料 包含AD原理图及pcb文件

上一篇: 关于vivi编译时遇到的几个错误
下一篇: Trap命令之信号处理
liangkaiming
博客等级 码龄16年 254粉丝 42原创
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值