GNU make解析Makefile的过程与变量取值
需积分: 34 44 浏览量
更新于2024-08-10
收藏 1.45MB PDF 举报
"本文介绍了GNU Make工具如何解析Makefile文件,特别是关于变量取值的规则以及make执行过程的两个阶段。"
在编程世界中,`make`是一个强大的自动化构建工具,常用于编译C/C++等语言的项目。GNU Make是其中最常用的版本,它的执行流程分为两个阶段:
1. **第一阶段**:读取所有指定的makefile文件,包括通过`MAKEFILES`变量、`include`指令和`-f (--file)`命令行选项指定的文件。在这个阶段,make会初始化所有变量,定义明确规则和隐含规则,并建立目标与依赖之间的依赖关系链表。
2. **第二阶段**:基于第一阶段构建的依赖关系,make确定哪些目标需要更新,并使用相应的规则去重建这些目标。这个阶段涉及到变量和函数的延迟展开,即在需要时才进行计算。
理解这两个阶段对于编写Makefile至关重要,因为它影响到变量和函数的展开时机。变量和函数的展开分为两种类型:立即展开(在第一阶段完成)和延迟展开(在第二阶段或使用时展开)。
**变量取值规则**:
- `IMMEDIATE = DEFERRED`:这种赋值方式是延迟展开的,变量DEFERRED的值在实际使用时才计算。
- `IMMEDIATE ?= DEFERRED`:同样,条件赋值也是延迟展开。
- `IMMEDIATE := IMMEDIATE`:使用双等号`:=`定义的变量是立即展开的,其右边的表达式会在定义时立即计算。
- `IMMEDIATE += DEFERRED or IMMEDIATE`:追加赋值时,如果之前变量是用`:=`定义的,视为立即展开;否则,为延迟展开。
`define`指令用于定义多行变量,其内部的内容是立即展开的。`endef`标记定义的结束。
学习`make`的执行过程,尤其是变量展开的规则,能够帮助编写出更高效、更易维护的Makefile。随着阅读和实践的深入,你将逐步掌握make的全部操作。例如,了解何时使用立即展开和延迟展开,可以避免因错误的变量处理导致的构建问题。
`make`的其他功能包括条件语句、规则定义、通配符匹配、目录搜索、静态模式规则等,这些都在`GNUmake中文手册`中有所阐述。手册中的章节如`Makefile规则`提供了关于如何编写规则、处理依赖关系、使用通配符以及目录搜索的详细信息,这些都是构建复杂项目时不可或缺的知识。
通过学习这个手册,开发者可以有效地利用`make`自动化构建流程,提高开发效率,减少手动编译和链接的繁琐工作。掌握这些知识对于任何涉及编译的软件工程都是必要的。
2021-05-27 上传
2018-05-09 上传
2020-12-23 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
郝ren
- 粉丝: 57
- 资源: 4050
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍