GNUmake中文手册:Stc8H单片机变量设置与Makefile详解

需积分: 34 34 下载量 158 浏览量 更新于2024-08-10 收藏 1.45MB PDF 举报
"如何设置变量-stc8h 系列单片机技术参考手册" 在 GNU Make 中,设置变量是构建 Makefile 的关键部分,用于存储和传递信息。本篇主要聚焦于如何在 Makefile 中定义和使用变量,适用于 STC8H 系列单片机的开发。 首先,变量可以通过“=”或“:=”进行定义。使用“=”定义的变量称为递归展开式变量,它的值在使用时才会展开,如果值中包含其他变量,会在遇到该变量时进行展开。例如: ```make objects = main.o foo.o bar.o utils.o ``` 这里的 `objects` 变量被定义为一个 `.o` 文件列表,其中的空格会被忽略。 而使用“:=”定义的变量为直接展开式变量,它的值在定义时就会立即展开,即使值中包含其他变量或函数的引用。这种方式有时更高效,但要注意可能会导致早期评估的问题。 定义变量时需注意以下几点: 1. 变量名可以包含其他变量或函数的引用,make 在读取时会进行替换。例如,`$(foo)bar` 可能会被替换为已经定义的 `foo` 变量的值加上 "bar"。 2. 变量的值长度没有硬性限制,但应考虑实际需求和机器内存。长变量值可通过换行并用反斜杠(\)连接来提高可读性和维护性。 3. 引用未定义的变量,默认其值为空。 4. 有些预定义的隐含变量,如 `CC`、`CFLAGS` 等,可以在 Makefile 中重新赋值,以适应项目需求。 5. 自动变量如 `$@`、`$<` 等,它们在不同规则中会有不同的值,用于在规则命令中引用目标和依赖等。 6. 使用“?=”赋值运算符可以确保只有当变量未定义时才进行赋值,避免覆盖已有值。 了解这些基本概念后,可以更好地编写 Makefile,有效地组织编译和构建流程。例如,可以创建规则来编译源文件: ```make CFLAGS = -Wall -g %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ ``` 在这个例子中,`CFLAGS` 是一个预定义变量,用来设置编译选项,`%.o: %.c` 是一个模式规则,`$<` 和 `$@` 分别代表依赖文件和目标文件。 理解和熟练运用 GNU Make 中的变量机制,能够帮助开发者编写出高效且易于维护的 Makefile,从而优化 STC8H 系列单片机的软件构建过程。