Makefile深入解析:目标变量与环境变量
需积分: 48 105 浏览量
更新于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,提高软件构建的自动化程度。
1693 浏览量
点击了解资源详情
点击了解资源详情
2025-01-07 上传
2021-10-01 上传
112 浏览量
2023-09-04 上传
半夏256
- 粉丝: 20
- 资源: 3827
最新资源
- pogpoints
- A-Star-Visualizer
- MusicalStructure:显示数组,数组列表,意图和Java代码
- tmux-thumbs-用Rust编写的tmux-finger的快速版本,复制/粘贴vimium / vimperator等tmux。-Rust开发
- 行业文档-设计装置-一种平张纸托盘包装盖板.zip
- 视场演员组件。虚幻引擎4:添加呈现视场的组件
- XSL合并工具,店铺商品订单合并工具
- kiftd私人云盘搭建系统 v1.0.18
- buildTest
- ESP32-W5100:PoC应用程序测试W5100与esp-idf的集成
- 定时关机.rar
- Rcon Web Console-开源
- LSP客户端在Rust中实现并开箱即用地支持rls。-Rust开发
- 行业文档-设计装置-一种具有储物功能的床体包裹面料.zip
- DroidAttack:TPS(第三人称射击游戏)演示游戏,该游戏使用C ++编码的虚幻引擎4构建。 - 开发中
- STM32官方文档HAL&LL库相关