makefile中的patsubst

函数名称:加前缀函数—addprefix。

函数功能:为“NAMES…”中的每个文件名称加入?前缀“PREFIX”。參数“NAMES…”是空格切割的文件名称序列,将“SUFFIX”加入?到此序列的每个文件名称之前。

返回值:以单空格切割的加入?了前缀“PREFIX”的文件名称序列。

函数说明:

演示样例:

$(addprefix src/,foo bar)

返回值为“src/foo src/bar”。

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模板可改动的基本就是AVR名称和时钟频率了,其他的一般不用动了。

时间: 2024-07-28 15:41:24

makefile中的patsubst的相关文章

makefile中的patsubst函数有何作用?

答:这是个模式替换函数,格式为: $(patsubst <pattern>,<replacement>,<text>) 查找text中的单词,如果匹配pattern,那么就用replacement的内容替换 举例: $(patsubst %.c,%.o,jello1.c jello2.c) 那么将会替换成jello1.o jello2.o 原文地址:https://www.cnblogs.com/dakewei/p/10758152.html

通用 Makefile(及makefile中的notdir,wildcard和patsubst)

notdir,wildcard和patsubst是makefile中几个有用的函数,以前没留意过makefile中函数的用法,今天稍微看看~ 1.makefile里的函数 makefile里的函数使用,和取变量的值类似,是以一个'$'开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样 return = $(functionname  arg1,arg2,arg3...). 可能这里的'$'更像是从某个地址取值类似的操作. 2. wildcard 使用:SRC = $(w

(转)makefile中的自动依赖规则

Makefile生成自动依赖的方法有两种: 1.  将所有.o文件的依赖关系写入单独文件,然后在Makefile中调用该文件 2.  每个.c文件对应一个.d文件,将依赖关系写入.d文件中 一.对于第一种方法,Makefile的写法如下: #file start CC = gcc SRCS := $(wildcard *.c) OBJS := $(patsubst %.c,%.o, $(SRCS)) all: main main: $(OBJS) $(CC) -o main $(OBJS) .d

Makefile中的函数

Makefile 中的函数 Makefile 中自带了一些函数, 利用这些函数可以简化 Makefile 的编写. 函数调用语法如下: $(<function> <arguments>) # 或者 ${<function> <arguments>} <function> 是函数名 <arguments> 是函数参数 1.1 字符串函数 字符串替换函数: $(subst <from>,<to>,<text&

Makefile 中条件表达式 以及函数

Makefile中条件表达式的语法为: <conditional-directive> <text-if-true> endif 或者 <conditional-directive> <text-if-true> else <text-if-false> endif <conditional-directive> 表示条件关键字: 关键字    说明 ifeq ifeq (arg1,arg2)       比较参数arg1和arg2的

Makefile中wildcard的介绍

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

Makefile 中的常用函数

1.$(subset <from>,<to>,<text>) 名称:字符串替换 功能:把字符串<text>中得<from>字符串替换成<to> 返回值:返回被替换过后的字符串 示例: $(subst ee,EE,feet on the street) 把"feet on the street"中的"ee"替换成"EE",返回结果是"fEEt on the strEE

Makefile中的常用函数

在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使用. 一.函数的调用语法 函数调用,很像变量的使用,也是以"$"来标识的,其语法如下: $( ) 或是 ${ } 这里,就是函数名,make支持的函数不多.是函数的参数,参数间以逗号","分隔,而函数名和参数之间以"空格"分隔.函数调用以"$"

makefile中条件判断与函数

1. 条件判断 1.1 语法 条件表达式的语法为: <conditional-directive> <text-if-true> endif 以及: <conditional-directive> <text-if-true> else <text-if-false> endif 其中<conditional-directive>表示条件关键字,如"ifeq".这个关键字有四个. (1)第一个是我们前面所见过的&q