GNUMAKE中文手册:变量基础与Makefile解析

需积分: 50 25 下载量 67 浏览量 更新于2024-08-06 收藏 860KB PDF 举报
"变量的基础-thomas calculus 13th edition" 在Makefile中,变量是核心概念之一,用于存储和重用数据。本资源主要介绍了Makefile中的变量基础及其使用方法。 1. 变量声明与使用: 变量在声明时需要赋予初值,这通常是在Makefile的顶部进行。变量的赋值使用等号“=”。例如,`objects = program.o foo.o utils.o`。在使用变量时,需在变量名前加上美元符号“$”,以`$(objects)`的方式引用。为了避免与Shell中的特殊字符冲突,推荐使用小括号或大括号将变量包含起来,如`$(objects)`或`${objects}`。 2. 双美元符号“$$”: 如果你确实需要在命令中使用美元符号“$”,则需要写成“$$”来转义,以便Makefile正确解析。例如,`cc -o program $$objects`。 3. 变量展开: 变量在被引用的位置会立即展开其值,这种行为类似于C/C++中的宏展开。例如,`program : $(objects)`,在执行时,`$(objects)`会被替换为其定义时的值。 4. 变量类型: Makefile中有两种主要类型的变量:自动变量和用户定义变量。自动变量是Make内部定义的,如`$@`代表目标文件,`$<`代表第一个依赖文件。用户定义变量由用户根据需要创建。 5. 变量的扩展: - 递归扩展变量(默认):变量的值在引用时展开,允许变量嵌套,如`foo = bar $(bar)`, `bar = baz`,则`$(foo)`会扩展为`bar baz baz`。 - 非递归扩展变量(使用`:=`或`?=`赋值):变量只在赋值时展开一次,适合于需要一次性计算的值。 6. 追加赋值(+=): 使用`+=`操作符可以在现有变量值后面添加新值,而不覆盖原有值,如`objects += extra.o`。 7. `override`指示符: 当在Makefile或命令行中使用`override`重新定义变量时,即使在父Makefile中已经定义过,也会覆盖原有定义。 8. 多行变量: 变量值可以跨越多行,通过在行尾添加反斜杠“\”来实现。 9. 环境变量: Makefile可以使用Shell环境中的变量,通过`$(VARNAME)`引用。如果在Makefile中定义了同名变量,环境变量的值将被覆盖。 10. 目标变量与模式变量: 目标变量是与特定目标相关的变量,而模式变量应用于匹配特定模式的目标,如`%.o: %.c`中的`%`是模式变量,代表任何以`.c`结尾的文件。 11. 条件判断: Makefile支持条件语句,用于根据不同的条件执行不同的代码块,如`ifdef`, `ifndef`, `ifeq`, `ifneq`, `else`, `endif`等。 12. 函数: Makefile支持一系列内置函数,如字符串处理、文件名操作、循环和逻辑判断等,增强了Makefile的表达能力。 13. make的运行: 用户可以通过各种参数指定Makefile、目标、规则检查等,控制make的执行流程,例如`-f`指定Makefile,`-t`仅触制作标记,`-k`继续执行即使有错误等。 以上内容概述了Makefile中变量的使用,以及相关的规则、条件判断和函数的运用,为编写高效、灵活的构建脚本提供了基础。理解并熟练运用这些知识点,能帮助开发者更好地管理编译过程。