Makefile函数语法详解
版权申诉
153 浏览量
更新于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时,确保理解每个函数的作用,并根据实际需求选择合适的函数来使用。
122 浏览量
点击了解资源详情
159 浏览量
134 浏览量
119 浏览量
142 浏览量
136 浏览量
2011-03-02 上传
2009-05-21 上传

我慢慢地也过来了
- 粉丝: 1w+
最新资源
- 实际操作:从用户接触至需求分析的完整流程
- BEA Java虚拟化技术:提升效率与灵活性
- LDAP入门:原理、应用与故障诊断
- C++标准模板库STL详解:从入门到精通
- 2008年Intel白皮书:CPU升级优于GPU的选择
- ASP.NET中Frameset使用详解
- Hibernate入门教程:Java习惯下的关系数据库持久化
- 跟随陈皓探索Makefile:从基础到高级技巧
- Oracle架构解析:数据库与集群详细图
- 使用Eclipse进行ARM跨平台开发指南
- 柯尓顿信息咨询技术公司创业蓝图:引领信息咨询业
- 单片机原理与应用详解:从基础知识到主流产品
- 探索ASP.NET Web应用开发:深入浅出(英文版)
- C++笔试:结构体与类的区别及代码解析
- C++编程题目解析:引用与函数参数
- C++构造函数中的成员初始化列表详解