Simulink定制单片机驱动:变量中的变量与代码生成
需积分: 39 18 浏览量
更新于2024-08-09
收藏 585KB PDF 举报
"跟我一起写Makefile"
在编程和构建项目时,Makefile 是一个至关重要的工具,它自动化了编译和链接的过程。本资源主要探讨了如何编写和理解 Makefile,特别是涉及变量的使用和规则定义。以下是相关知识点的详细说明:
### 变量中的变量
Makefile 支持两种方式定义变量的值:赋值运算符“=”和立即赋值运算符“:=”。
#### 1. 赋值运算符 "="
使用“=”定义变量允许递归扩展。例如:
```makefile
foo = $(bar)
bar = $(ugh)
ugh = Huh?
```
在这个例子中,`foo` 的值会是 `$(bar)` 的值,`bar` 的值是 `$(ugh)` 的值,最后 `ugh` 的值是 "Huh?"。所以 `foo` 的最终值也是 "Huh?"。这种特性在需要延迟变量计算时很有用,例如:
```makefile
CFLAGS = $(include_dirs) -O
include_dirs = -Ifoo -Ibar
```
这样,`CFLAGS` 在使用时会包含 `include_dirs` 的值。
#### 2. 立即赋值运算符 ":="
使用“:=”则会在定义时立即扩展变量,避免了递归和潜在的无限循环问题,例如:
```makefile
CFLAGS := $(CFLAGS) -O
```
这种情况下,如果 `CFLAGS` 已经有值,那么新值会附加在原值后面,而不会再次尝试扩展 `CFLAGS`。
### 避免问题
使用“=”定义变量可能导致无限递归,如 `A = $(B)` 和 `B = $(A)`。此外,如果在变量值中使用函数(如 `wildcard` 和 `shell`),可能会导致性能下降和不可预测的错误,因为函数可能被重复调用。
### 其他Makefile知识点
- **规则**:定义了目标文件如何根据依赖文件进行构建。
- **显式规则**和**隐晦规则**:显式规则是用户明确指定的,隐晦规则是Makefile内部预定义的,用于常见的编译和链接任务。
- **变量的定义**:变量可以存储指令、路径、选项等,简化Makefile的编写。
- **自动推导**:make可以根据源文件和目标文件的扩展名自动推导编译规则。
- **命令执行**:命令通常在规则的后面,以`\`结束行可实现多行命令,`@`前缀可以让命令不显示在终端上。
- **条件判断**和**函数**:允许根据特定条件执行不同命令,以及对字符串和文件名进行操作。
Makefile 是构建工程的关键组成部分,理解和熟练运用变量和规则能有效提高构建效率和代码的可维护性。通过深入学习,开发者可以编写出更加高效和灵活的构建脚本。
2020-04-11 上传
2012-12-12 上传
2020-04-11 上传
2023-04-30 上传
2023-09-30 上传
2024-10-26 上传
2024-02-03 上传
2023-03-04 上传
2024-10-27 上传
sun海涛
- 粉丝: 36
- 资源: 3854
最新资源
- Aspose资源包:转PDF无水印学习工具
- Go语言控制台输入输出操作教程
- 红外遥控报警器原理及应用详解下载
- 控制卷筒纸侧面位置的先进装置技术解析
- 易语言加解密例程源码详解与实践
- SpringMVC客户管理系统:Hibernate与Bootstrap集成实践
- 深入理解JavaScript Set与WeakSet的使用
- 深入解析接收存储及发送装置的广播技术方法
- zyString模块1.0源码公开-易语言编程利器
- Android记分板UI设计:SimpleScoreboard的简洁与高效
- 量子网格列设置存储组件:开源解决方案
- 全面技术源码合集:CcVita Php Check v1.1
- 中军创易语言抢购软件:付款功能解析
- Python手动实现图像滤波教程
- MATLAB源代码实现基于DFT的量子传输分析
- 开源程序Hukoch.exe:简化食谱管理与导入功能