【ARM 嵌入式 编译 Makefile 系列 5 - Makefile函数调用patsubst命令详细介绍】

文章介绍了Makefile中的patsubst函数,用于模式替换,通过示例展示了如何使用patsubst配合wildcard函数动态生成OBJS变量,用于编译规则中的目标文件列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


请阅读【ARM GCC Makefile 编译专栏导读】

Makefile patsubst 学习

这个函数用于进行模式替换,它接受三个参数:

  • 第一个参数是查找模式;
  • 第二个参数是替换模式;
  • 第三个参数是单词列表。

例如:

FOO = foo1.c foo2.c bar.c 
BAR = $(patsubst %.c,%.o,$(FOO)) 

all: 
	@echo $(BAR)

执行make all后,会在命令行中打印foo1.o foo2.o bar.o

[06:54:35]  (*^~^*) ~/workbase/test> make all
foo1.o foo2.o bar.o

示例2

OBJS := trace32.o
DIRS :=

上面写法可以替换为:

OBJS := $(patsubst %.c,%.o,$(wildcard *.c))
DIRS :=

让我们分解这行脚本的不同部分来理解它是如何工作的:

  • objs:这是一个 Makefile 变量,你可以在 Makefile 的其他地方通过 $(objs) 引用它。
  • :=:这是一个简单的赋值操作,它会立即评估右侧的表达式,并将结果赋值给变量 objs。与之相对的是 =,它在每次使用变量时才会对右侧的表达式进行评估。
  • $(patsubst pattern,replacement,text):这是一个 Makefile 函数,用于模式字符串替换。它会在 text 中查找匹配 pattern 的词,并将其替换为 replacement
    • %.c:这是一个模式,% 是一个通配符,匹配任何字符串。
    • %.o:这是替换后的结果,它会将模式中匹配到的部分(即 % 部分)保留,并将 .c 后缀替换为 .o
  • $(wildcard *.c):又是一个 Makefile 函数,用于列出所有当前目录下匹配通配符模式 *.c 的文件。在这个例子中,它会列出所有 .c 后缀的文件。

综合以上内容,这行脚本的工作流程是:

  1. 使用 wildcard 函数找到当前目录下所有的 .c 源文件。
  2. 将找到的每个 .c 文件名传给 patsubst 函数。
  3. patsubst 函数将每个 .c 后缀替换为 .o 后缀。
  4. 最后,所有替换后的文件名被赋值给 objs 变量。

举例来说,如果当前目录下有 main.cutils.c 两个文件,那么 objs 变量将会被赋值为 main.o utils.o。这个变量通常被用在 Makefile 的编译规则中,来指定所有的 .o 文件,这样你就可以使用一个规则来构建所有的目标文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公讲 ARM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值