Makefile --- 变量赋值 := ?= += =的区别
Makefile 中:= ?= += =的区别
新建一个Makefile,内容为:
ifdef DEFINE_VRE
VRE = “Hello World!”
endif
ifeq ($(OPT),define)
VRE ?= “Hello World! First!”
endif
ifeq ($(OPT),add)
VRE += “Kelly!”
endif
ifeq ($(OPT),recover)
VRE := “Hello World! Again!”
endif
all:
@echo $(VRE)
敲入以下make命令:
make DEFINE_VRE=true OPT=define 输出:Hello World!
make DEFINE_VRE=true OPT=add 输出:Hello World! Kelly!
make DEFINE_VRE=true OPT=recover 输出:Hello World! Again!
make DEFINE_VRE=false OPT=define 输出:Hello World! First!
make DEFINE_VRE=false OPT=add 输出:Kelly!
make DEFINE_VRE=false OPT=recover 输出:Hello World! Again!
从上面的结果中我们可以清楚的看到他们的区别了
= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是追加等号后面的值
=和:=的区别:
1、“=”
make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:
x = foo
y = $(x) bar
x = xyz
在上例中,y的值将会是 xyz bar ,而不是 foo bar 。
2、“:=”
“:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。
x := foo
y := $(x) bar
x := xyz
在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。
相关文章
- 第三十九章 Caché 变量大全 $ZPOS 变量
- 第二十一章 Caché 变量大全 $USERNAME 变量
- 【软件测试】Postman中变量的使用
- spring @Value注入map、List、Bean、static变量方式及详细使用
- SHLVL 和 BASH_SUBSHELL 两个变量的区别
- 学习Python的第六节课(函数和变量作用域)
- 有时候shell中某些变量总是不能被改变是什么原因
- C++11(一):在类的定义时初始化非静态变量
- 查看Linux下*.a库文件中文件、函数、变量等情况
- 条件变量、信号量、互斥锁
- 正确使用 Volatile 变量——Brian Goetz
- 转 SQL*Plus中使用DATE类型的绑定变量 和 国产数据库 DM
- 信号量、互斥锁,读写锁和条件变量的区别
- Java 计算两个 LocalDateTime 类型的变量之间差的小时数,保留4位小数
- Linux C编程中条件变量与互斥锁、信号量的区别
- 成员函数内定义static变量(不安全,各对象之间共享)
- Linux awk命令变量设置
- 华为快应用-怎样写一个全局的变量和方法
- Linux设置环境变量小结:设置永久变量&临时变量 全局变量&局部变量
- c#中变量的作用域