### Makefile 函数详解 #### 一、概述 在构建自动化工具Makefile中,函数的使用可以帮助我们更灵活地处理各种构建任务。Makefile通过一系列预定义的函数提供了对字符串处理、列表操作等功能的支持,使得我们可以编写出更加简洁且功能强大的Makefile文件。 #### 二、函数语法 Makefile中的函数调用类似于变量使用,均以`$`符号作为前缀,语法格式如下: - `$(<function><arguments>)` - `${<function><arguments>}` 其中,`<function>`表示函数名,而`<arguments>`则是传递给该函数的参数。参数之间通过逗号`,`分隔,并且函数名与参数之间以一个空格进行分隔。 #### 三、字符串处理函数 ##### 3.1 字符串替换函数 - `subst` **函数原型**:`$(subst <from>,<to>,<text>)` **功能**:将字符串`<text>`中的所有出现的`<from>`替换为`<to>`。 **返回值**:返回替换后的字符串。 **示例**: ``` $(subst ee,EE,feetonthestreet) ``` 此示例将`feetonthestreet`中的`ee`替换为`EE`,返回结果为`fEEtonthestrEEt`。 ##### 3.2 模式字符串替换函数 - `patsubst` **函数原型**:`$(patsubst <pattern>,<replacement>,<text>)` **功能**:查找字符串`<text>`中的单词是否符合模式`<pattern>`,若匹配则替换为`<replacement>`。 **返回值**:返回替换后的字符串。 **示例**: ``` $(patsubst %.c,%.o,x.c.cbar.c) ``` 此示例将`x.c.cbar.c`中符合模式`%.c`的单词替换成`%.o`,返回结果为`x.c.obar.o`。 **备注**:此函数与变量章节中的模式替换功能相似。例如: - `$(var:<pattern>=<replacement>)` 相当于 `$(patsubst <pattern>,<replacement>,$(var))` - `$(var:<suffix>=<replacement>)` 相当于 `$(patsubst %<suffix>,%<replacement>,$(var))` **示例**: 假设 `objects=foo.obar.obaz.o` ,则 `$(objects:.o=.c)` 和 `$(patsubst %.o,%.c,$(objects))` 的效果相同。 ##### 3.3 去空格函数 - `strip` **函数原型**:`$(strip <string>)` **功能**:移除字符串`<string>`开头和结尾的所有空白字符。 **返回值**:返回去除空白字符后的字符串。 **示例**: ``` $(strip abc) ``` 此示例将`abc`去除了开头和结尾的空白字符后,结果仍然是`abc`。 ##### 3.4 查找字符串函数 - `findstring` **函数原型**:`$(findstring <find>,<in>)` **功能**:在字符串`<in>`中查找子字符串`<find>`。 **返回值**:如果找到,则返回`<find>`;否则返回空字符串。 **示例**: ``` $(findstring a,abc) $(findstring a,bc) ``` 第一个函数返回`a`,第二个返回空字符串。 ##### 3.5 过滤函数 - `filter` **函数原型**:`$(filter <pattern>,<text>)` **功能**:从字符串`<text>`中筛选出符合模式`<pattern>`的单词。 **返回值**:返回符合模式的单词组成的字符串。 **示例**: ``` sources:=foo.cbar.cbaz.sugh.h foo:$(sources) cc $(filter %.c%.s,$(sources)) -o foo ``` 此示例中,`$(filter %.c%.s,$(sources))`返回`foo.c bar.c baz.s`。 ##### 3.6 反过滤函数 - `filter-out` **函数原型**:`$(filter-out <pattern>,<text>)` **功能**:从字符串`<text>`中排除符合模式`<pattern>`的单词。 **返回值**:返回不符合模式的单词组成的字符串。 **示例**: ``` objects=main1.o foo.o main2.o bar.o mains=main1.o main2.o $(filter-out $(mains),$(objects)) ``` 此示例中,`$(filter-out $(mains),$(objects))`返回`foo.o bar.o`。 ##### 3.7 排序函数 - `sort` **函数原型**:`$(sort <list>)` **功能**:对字符串`<list>`中的单词进行升序排序。 **返回值**:返回排序后的字符串。 **示例**: ``` $(sort foobarlose) ``` 此示例中,`$(sort foobarlose)`返回`bar foobar lose`。 **备注**:`sort`函数还会自动移除`<list>`中重复的单词。 #### 四、总结 以上介绍的是Makefile中常用的字符串处理函数,这些函数在构建过程中非常有用,可以帮助我们更高效地处理文件路径、依赖关系等。掌握这些函数的使用方法,能够帮助我们编写出更加灵活和高效的Makefile文件。
剩余11页未读,继续阅读
- 粉丝: 3w+
- 资源: 69
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助