理解Makefile中的目标指定变量-sse4.2命令集详解

需积分: 4 65 下载量 176 浏览量 更新于2024-08-09 收藏 4.21MB PDF 举报
"GNU make makefile 中文手册" 在Makefile编写过程中,理解并熟练使用目标指定变量(Target-specific Variable)是提升构建效率的关键。目标指定变量允许为特定的目标设定特定的变量值,使得构建过程更加灵活。以下是关于目标指定变量的详细说明: 1. 定义与作用范围: - 目标指定变量通过`TARGET ... : VARIABLE-ASSIGNMENT`或`TARGET ... : override VARIABLE-ASSIGNMENT`语法设置,其中`TARGET`是目标文件名,`VARIABLE-ASSIGNMENT`是变量赋值表达式。 - 作用范围仅限于指定目标及其相关规则,不会影响其他目标。 2. 赋值方式: - 变量赋值可以使用`=`(递归赋值)、`:=`(静态赋值)、`+=`(追加赋值)或`?=`(条件赋值)等赋值运算符。 3. 与全局变量的关系: - 目标指定变量不会影响全局变量的值,即它们之间是独立的。对于其他未指定目标,全局变量的值仍然保持不变。 - 当命令行或环境变量定义了与目标指定变量同名的变量时,若无`override`指示符,目标指定变量的定义会被覆盖。 4. 优先级与覆盖: - 命令行参数或`-e`选项指定的变量会覆盖目标指定变量,除非使用`override`来强化目标指定变量的定义。 5. 变量风格: - 目标指定变量与全局变量在展开风格上可以不同,可以独立设置为递归展开或直接展开。 6. 影响范围: - 目标指定变量的值会应用到由该目标触发的所有规则,例如,`prog : CFLAGS = -g`会确保在构建`prog`时使用`-g`标志。 7. 使用示例: ```make prog : CFLAGS = -g prog : prog.o foo.o bar.o ``` 在这个例子中,不论Makefile中全局`CFLAGS`定义为何,构建`prog`时,`CFLAGS`将临时设置为`-g`。 8. 递归与非递归make: - 目标指定变量在递归调用`make`时也适用,但作用范围限制在当前Makefile中指定的目标。 通过合理利用目标指定变量,开发者可以根据不同目标的特定需求定制构建过程,提高构建的灵活性和可维护性。在编写复杂的Makefile时,这一特性尤为重要,能够帮助避免全局变量的冲突,同时保持构建逻辑清晰。