目标变量

简介: 目标变量

前面我们所讲的在 Makefile 中定义的变量都是全局变量,在整个文件,我们都可以访问这些变量。当然,自动化变量除外,如 $< 等这种类量的自动化变量就属于规则型变量,这种变量的值依赖于规则的目标和依赖目标的定义。


当然,我也同样可以为某个目标设置局部变量,这种变量被称为 Target-specific Variable ,它可以和全局变量同名,因为它的作用范围只在这条规则以及连带规则中,所以其值也只在作用范围内有效。而不会影响规则链以外的全局变量的值。


其语法是:

<target ...> : <variable-assignment>;
<target ...> : overide <variable-assignment>点击复制复制失败已复制


<variable-assignment>; 可以是前面讲过的各种赋值表达式,如 =:=+= 或是 ?= 。第二个语法是针对于 make 命令行带入的变量,或是系统环境变量


这个特性非常的有用,当我们设置了这样一个变量,这个变量会作用到由这个目标所引发的所有的规则中去。如:

prog : CFLAGS = -g
prog : prog.o foo.o bar.o
    $(CC) $(CFLAGS) prog.o foo.o bar.o
prog.o : prog.c
    $(CC) $(CFLAGS) prog.c
foo.o : foo.c
    $(CC) $(CFLAGS) foo.c
bar.o : bar.c
    $(CC) $(CFLAGS) bar.c点击复制复制失败已复制


在这个示例中,不管全局的 $(CFLAGS) 的值是什么,在 prog 目标,以及其所引发的所有规则中( prog.o foo.o bar.o 的规则), $(CFLAGS) 的值都是 -g

目录
相关文章
|
7月前
|
存储 Java
变量的分类和作用2
变量的分类和作用
47 1
|
7月前
|
Java 编译器
变量的分类和作用1
变量的分类和作用
62 0
|
7月前
|
存储 C# 容器
掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南
变量是用于存储数据值的容器。 在 C# 中,有不同类型的变量(用不同的关键字定义),例如: int - 存储整数(没有小数点的整数),如 123 或 -123 double - 存储浮点数,有小数点,如 19.99 或 -19.99 char - 存储单个字符,如 'a' 或 'B'。Char 值用单引号括起来 string - 存储文本,如 "Hello World"。String 值用双引号括起来 bool - 存储具有两个状态的值:true 或 false
105 2
|
7月前
|
SQL 监控 测试技术
Lim测试平台变量使用规则介绍
Lim测试平台变量使用规则介绍
64 0
|
缓存 运维 监控
【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)
【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)
404 0
|
数据库连接 数据库 数据安全/隐私保护
对象变量或with块变量未设置————问题根源
对象变量或with块变量未设置————问题根源
1190 0
对象变量或with块变量未设置————问题根源
|
C++
变量基础
变量基础
98 0
|
SQL 数据库连接 数据库
实时错误“91” 对象变量或with块变量未设置”
实时错误“91” 对象变量或with块变量未设置”
848 0
实时错误“91” 对象变量或with块变量未设置”
|
SQL 数据库连接 数据库
实时错误 ‘91‘ :对象变量或with块变量未设置
实时错误 ‘91‘ :对象变量或with块变量未设置
实时错误 ‘91‘ :对象变量或with块变量未设置
|
C语言
【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )
【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )
574 0
【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )