GNU make解析makefile的两个阶段-CFD数值模拟原理
需积分: 50 144 浏览量
更新于2024-08-08
收藏 1.24MB PDF 举报
"GNU make中文手册 ver-3.8"
GNU make是用于自动化构建软件的工具,它通过解析Makefile文件来确定需要构建的目标及其依赖。理解make的工作原理和解析过程对于编写有效的Makefile至关重要。
在 GNU make 的执行过程中,整个流程可以分为两个阶段:
1. **第一阶段:读取与解析 makefile**
在这个阶段,make会读取所有指定的makefile文件,包括`MAKEFILES`变量指定的、`include`指令引入的以及`-f (--file)`命令行选项指定的文件。在这个过程中,它会处理变量定义、明确规则和隐含规则,建立目标与依赖之间的依赖关系结构链表。理解这一阶段是关键,因为在这个阶段,变量和函数的"立即"展开会发生。这意味着,如果变量和函数在这个阶段被用到,它们会被立即计算并在构建依赖关系链表时使用。
2. **第二阶段:目标更新与执行**
在依赖关系结构链表建立好之后,make会根据链表决定哪些目标需要更新,然后使用对应的规则来执行命令重建这些目标。在这个阶段,那些在第一阶段未"立即"展开的变量和函数,会在需要时进行"延后"展开,即在实际执行命令时才进行计算。
在编写Makefile时,区分变量和函数的"立即"和"延后"展开非常重要。正确的使用方式可以避免错误和混淆。例如,如果你希望一个变量在规则执行时才计算其值,那么应该使用延后展开的方式。反之,如果变量的值在解析Makefile时就需要确定,那么应该使用立即展开。
Makefile的基本结构包括目标、依赖和命令。规则通常由目标、依赖目标和命令组成,如:
```make
target : dependency...
command
```
`target`是需要构建的文件,`dependency...`是目标依赖的文件,`command`是在更新目标时执行的命令。
Makefile中的变量可以提前定义,也可以在运行时动态赋值。自动变量如`$@`表示当前目标,`$<`表示第一个依赖,这些都是在规则执行时展开的。
此外,`make`还支持条件语句(如`if`、`ifdef`等)和函数(如`$(patsubst)`、`$(filter-out)`等)来增强Makefile的逻辑和处理能力。
`make`的隐含规则是预定义的一些通用构建规则,如编译C程序时的`.c.o`规则。可以通过`vpath`来控制搜索依赖文件的目录,`VPATH`变量则全局地设置搜索路径。
理解`make`的工作原理和Makefile的编写规范,可以帮助开发者更高效地管理和构建项目,节省时间和资源。通过熟练掌握makefile的规则、变量和函数,可以编写出灵活、可维护的构建脚本。
2020-12-23 上传
2018-05-09 上传
2019-09-04 上传
2023-05-19 上传
2023-05-11 上传
2023-05-30 上传
2023-07-12 上传
2023-07-14 上传
2023-04-04 上传
菊果子
- 粉丝: 50
- 资源: 3764
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器