理解Makefile:变量中的变量与递归扩展
需积分: 50 156 浏览量
更新于2024-08-10
收藏 964KB PDF 举报
"变量中的变量-算法引论:一种创造性方法---高清版"
在Makefile编程中,变量的使用是至关重要的。变量允许我们存储和复用配置信息,提高代码的可读性和可维护性。本资源主要探讨了两种在Makefile中定义变量的机制以及它们的优缺点。
首先,介绍的是基本的赋值方式,即使用等号“=”进行赋值。这种方式允许我们用已有的变量值来构建新的变量。例如:
```makefile
foo = $(bar)
bar = $(ugh)
ugh = Huh?
```
在这个例子中,`foo`的最终值将是`Huh?`,因为Makefile会递归地解析变量。虽然这种递归赋值在某些场景下是有用的,例如延迟变量的计算,如`CFLAGS = $(include_dirs) -O`,其中`include_dirs`可以在稍后定义。然而,它也存在风险,比如可能导致无限递归(如`A = $(B)`和`B = $(A)`),并且当在变量值中使用函数(如`wildcard`和`shell`)时,可能会导致性能问题和不可预测的结果。
为了避免这些问题,Makefile提供了另一种赋值操作符“:=”,也称为即时赋值或静态赋值。使用“:=”时,变量的值会在赋值时立即计算,而不是在使用时展开。这有助于避免无限递归和性能问题,例如:
```makefile
CFLAGS := $(include_dirs) -O
include_dirs := -Ifoo -Ibar
```
在这种情况下,`CFLAGS`的值将只计算一次,不会因`include_dirs`的改变而改变。
Makefile的编写还包括了许多其他方面,如规则的定义、目标的编译和链接、自动推导依赖性、使用通配符、伪目标、多目标、静态模式规则等。此外,Makefile还支持条件判断和函数调用,提供了丰富的字符串和文件名处理功能,增强了Makefile的灵活性和功能性。
理解并熟练掌握Makefile中的变量用法是编写高效Makefile的关键,这有助于构建自动化构建流程,简化复杂的项目构建过程。通过合理使用变量、条件语句和函数,开发者能够编写出更加智能和适应性强的Makefile脚本。
2656 浏览量
2018-08-20 上传
161 浏览量
168 浏览量
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
半夏256
- 粉丝: 20
- 资源: 3841
最新资源
- 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邮政地址解析器项目