Makefile深入解析:目标变量与环境变量
需积分: 48 124 浏览量
更新于2024-08-09
收藏 478KB PDF 举报
"这篇文档是《跟我一起写Makefile》PDF重制版的一部分,由陈皓撰写,介绍了Makefile的编写和使用。内容涵盖了Makefile的基本概念、规则、变量使用、命令书写、条件判断和函数应用等多个方面。"
在Makefile的编写中,环境变量和目标变量是两个重要的概念。
环境变量在Makefile中的使用允许我们设置通用的编译参数,例如`CFLAGS`。当Makefile运行时,如果在系统环境中定义了`CFLAGS`,这个变量的值会被所有Makefile使用,除非Makefile内部重新定义了该变量。如果使用`-e`选项启动`make`,则系统环境变量会覆盖Makefile中的定义。在嵌套调用Makefile时,上层Makefile定义的变量可以通过环境变量传递给下层,但需要使用`export`关键字。然而,过多地依赖环境变量可能造成不同Makefile之间配置冲突的问题。
目标变量(Target-specific Variables)是Makefile的一个高级特性,允许为特定的目标设定局部变量。这样的变量只在定义的规则及其连带规则中有效,不会影响其他全局变量。定义目标变量的语法如下:
```
<target ...> : <variable-assignment>;
<target ...> : override <variable-assignment>
```
例如,可以为`prog`目标指定`CFLAGS`变量:
```
prog : CFLAGS = -g
prog : prog.o foo.o bar.o
$(CC) $(CFLAGS) prog.o foo.o bar.o
```
在这个例子中,`-g`只在构建`prog`时启用,不会影响其他规则对`CFLAGS`的使用。
Makefile的基本结构包括规则、变量和命令。规则定义了目标文件如何由依赖文件生成,变量则用来存储常量和动态计算值,命令用于描述执行的操作。Makefile还支持自动化变量,如`$<`代表第一个依赖目标,以及模式规则,用于匹配和处理一组相似的文件。
此外,Makefile还可以利用条件判断和内置函数进行更复杂的逻辑控制和字符串、文件路径的处理。理解并熟练运用这些概念和技巧,能帮助开发者编写出高效且易于维护的Makefile,提高软件构建的自动化程度。
129 浏览量
点击了解资源详情
点击了解资源详情
2021-10-01 上传
2021-12-01 上传
2023-09-04 上传
2021-05-25 上传
半夏256
- 粉丝: 20
- 资源: 3833
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器