Makefile函数语法详解
版权申诉
81 浏览量
更新于2024-09-08
收藏 42KB DOC 举报
"Makefile常用函数语法总结"
Makefile是构建自动化工具,它定义了一系列的规则来编译、链接和处理其他文件。在编写Makefile时,使用函数可以使规则更加灵活和智能化。以下是对Makefile中常用函数的详细说明:
1. 函数调用语法
函数调用的格式通常是`$()`或`${}`。函数名后面跟着空格,然后是函数参数,参数之间以逗号分隔。例如,`$(function arg1, arg2)`。参数可以包含变量,保持括号风格一致有助于提高代码可读性。
2. 字符串处理函数
- **$(subst,from,to,string)**:这是替换函数,将字符串`string`中所有出现的`from`替换为`to`。例如,`$(subst ee,EE,feetonthestreet)`将返回`fEEtonthestrEEt`。
- **$(patsubst,pattern,replacement,text)**:模式替换函数,它会遍历`text`中的每个单词,检查是否匹配`pattern`。如果匹配,将使用`replacement`替换`pattern`中的`%`。`%`在这里作为通配符,代表任意数量的字符。例如,`$(patsubst %.c,%.o,foo.c bar.c baz.c)`将返回`foo.o bar.o baz.o`,因为它将`.c`文件名转换为相应的`.o`目标文件名。
3. 变量扩展和函数组合
- **$(var)**:简单变量扩展,直接返回变量`var`的值。
- **$$**:在Makefile中,`$$`用于表示一个单一的`$`字符,因为在Makefile中`$`是特殊字符,用来引用变量或函数。
- **$()** 和 `${}`:用于函数调用,但是`${}`允许在变量名中使用特殊字符,如空格。
4. 文件和路径处理函数
- **$(wildcard pattern)**:返回与`pattern`匹配的所有文件名。例如,`$(wildcard *.c)`将返回当前目录下所有`.c`文件的列表。
- **$(dir file)**:返回`file`的目录部分,不包括文件名。
- **$(notdir path)**:返回`path`中的文件名部分,不包括目录。
- **$(suffix file)**:返回`file`的扩展名,例如,对于`foo.c`,返回`.c`。
- **$(basename file)**:返回`file`的基名,即去掉扩展名的部分。
5. 数学运算函数
- **$(shell command)**:执行`command`并返回结果,通常用于执行系统命令并获取输出。
- **$(word N, text)**:在`text`中返回第`N`个单词,单词由空格、Tab或换行分隔。
- **$(words text)**:返回`text`中的单词总数。
6. 控制结构函数
- **$(if condition, then-part, [else-part])**:如果`condition`为非空,返回`then-part`;否则返回`else-part`(可选)。
- **$(or cond1, cond2, ...)**:如果`cond1`、`cond2`等中有非空的,返回第一个非空的。
- **$(and cond1, cond2, ...)**:如果所有`cond1`、`cond2`等都非空,返回最后一个。
通过熟练掌握这些函数,你可以编写出更复杂的Makefile规则,实现自动化构建的高效和灵活。在编写Makefile时,确保理解每个函数的作用,并根据实际需求选择合适的函数来使用。
2010-02-02 上传
2013-07-08 上传
2007-12-24 上传
2022-02-21 上传
2008-12-17 上传
2009-05-21 上传
2022-07-13 上传
2009-05-21 上传
2009-07-24 上传
我慢慢地也过来了
- 粉丝: 9698
- 资源: 4073
最新资源
- StarModAPI: StarMade 模组开发的Java API工具包
- PHP疫情上报管理系统开发与数据库实现详解
- 中秋节特献:明月祝福Flash动画素材
- Java GUI界面RPi-kee_Pilot:RPi-kee专用控制工具
- 电脑端APK信息提取工具APK Messenger功能介绍
- 探索矩阵连乘算法在C++中的应用
- Airflow教程:入门到工作流程创建
- MIP在Matlab中实现黑白图像处理的开源解决方案
- 图像切割感知分组框架:Matlab中的PG-framework实现
- 计算机科学中的经典算法与应用场景解析
- MiniZinc 编译器:高效解决离散优化问题
- MATLAB工具用于测量静态接触角的开源代码解析
- Python网络服务器项目合作指南
- 使用Matlab实现基础水族馆鱼类跟踪的代码解析
- vagga:基于Rust的用户空间容器化开发工具
- PPAP: 多语言支持的PHP邮政地址解析器项目