Simulink定制单片机驱动:变量中的变量与代码生成

需积分: 39 19 下载量 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 是构建工程的关键组成部分,理解和熟练运用变量和规则能有效提高构建效率和代码的可维护性。通过深入学习,开发者可以编写出更加高效和灵活的构建脚本。