博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux中Makefile文件的patsubst函数
阅读量:3521 次
发布时间:2019-05-20

本文共 755 字,大约阅读时间需要 2 分钟。

问题:

       patsubst:模式字符串替换 我想问下什么是模式字符串啊??这是一道linux的知识。

回答:
 
 
 
 
 
 
patsubst 应该是 makefile 里的一个函数 (如果你问的 patsubst 是其他语言里的,那就别看下面的了)
比方说你在 makefile 里定义了一个变量,内容是一堆 .c 文件的的名字,如
SRC = aaa.c 
bbb.c 
my.c his.c
你可以用 patsubst 根据 某种模式,将这些名字改成另外的,比如将这些 .c 文件的名字变成 .s 为后缀的名字:
NEW = $(patsubst "%.c", "%.s", ${SRC})
这样 NEW 这个变量中,就记录了 aaa.s 
bbb.s 
my.s his.s 这些后缀名为 .s 的文件。 上面命令中的模式字符串就是 "%.c" 或 "%.s", 而其中的 "%" 就是特殊的匹配字符,对于 aaa.c 这个字符串来说, 
"%.c" 中的% 就匹配 aaa。这个很像我们在 bash 或者 dos 下用 *.c 匹配所有 .c 文件时候的那个 *

追问

我还有一点不太明白,这样的话,改成这样不行吗? NEW=$(subst .c, .s, ${SRC})效果不是一样的吗?啥时用%啥时不用啊?

回答

在我给的例子中,确实一样, 但是某些情况下,就不一样了。因为subst 会把每一个 .c 都替换成 .s, 而我上面例子中的 patsubst 只会把最末尾的替换。 给你一个例子,你自己体会一下就明白了 SRC = a.c b.c m.c.c all: echo $(patsubst "%.c","%.s",${SRC}) echo $(subst .c,.s, ${SRC}) 自己执行一下,就知道区别了。

转载地址:http://vfhqj.baihongyu.com/

你可能感兴趣的文章
SpringBoot入门(二)场景启动器
查看>>
SpringBoot入门--自动配置
查看>>
springboot读取配置文件 例:读取配置文件的优先顺序;在主配置文件中激活其他配置文件;加载非主配置文件
查看>>
自动配置原理
查看>>
TCP协议
查看>>
关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
查看>>
redis 持久化详解,RDB和AOF是什么?他们优缺点是什么?运行流程是什么?
查看>>
spring注解版(一)
查看>>
SpringBoot中访问控制层(controller)得不到Json数据
查看>>
react项目报出警告Warning: Cannot update during an existing state transition (such as within `render`).
查看>>
BFC(Block Formatting Context)
查看>>
什么是作用域,什么是闭包,什么是作用域链
查看>>
惰性求值,面向对象
查看>>
lodash源码分析之baseSlice()函数
查看>>
数据结构之列表
查看>>
发布/订阅模式 vs 观察者模式
查看>>
es5中的arguments对象
查看>>
git本地仓库和远程仓库关联,分支重命名
查看>>
js对象的深拷贝,你真的觉得很简单吗?
查看>>
你真的了解map方法吗?手动实现数组map方法。
查看>>