Makefile中=, :=, ?=和+=的含义
Makefile中=, :=, ?=和+=的含义
- 1. 含义
- 1.1 " = "
- 1.2 " := "
- 1.3 " ?= "
- 1.4 " += "
- 2. 实例
在Makefile语法中,时不时会见到各种“=”号的赋值语句,除了常见的“=”和“:=”,还有“?=”等
那么这些赋值等号分别表示什么含义呢?
1. 含义
1.1 " = "
“=”是最普通的等号,然而在Makefile中确实最容易搞错的赋值等号,使用“=”进行赋值,变量的值是整个makefile中最后被指定的值。不太容易理解,举个例子如下:
VIR_X = foo VIR_Y = $(VIR_X) bar VIR_X = xyz
经过上面的赋值后,最后VIR_Y的值是xyz bar,而不是foo bar。在make时,会把整个makefile展开,拉通决定变量的值
1.2 " := "
相比于前面“最普通”的“=”,“:=”就容易理解多了。“:=”就表示直接赋值,赋予当前位置的值。同样举个例子说明
VIR_X := foo VIR_Y := $(VIR_X) bar VIR_X := xyz
最后变量VIR_Y的值是foo bar,即根据当前位置进行赋值。因此相比于“=”,“:=”才是真正意义上的直接赋值。
1.3 " ?= "
“?=”表示如果该变量没有被赋值,则赋予等号后的值。举例:
VIR ?= new_value
如果VIR在之前没有被赋值,那么VIR的值就为new_value.
VIR := old_value VIR ?= new_value
这种情况下,VIR的值就是old_value
1.4 " += "
“+=”和平时写代码的理解是一样的,表示将等号后面的值添加到前面的变量上。举例:
VIR = foo VIR += bar
最后结果为foobar.
2. 实例
我们来做个简单的实验,新建一个Makefile,内容为:
ifdef DEFINE_VREVRE = “Hello World!”
else
endififeq ($(OPT),define)VRE ?= “Hello World! First!”
endififeq ($(OPT),add)VRE += “Kelly!”
endififeq ($(OPT),recover)VRE := “Hello World! Again!”
endifall:@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= OPT=define 输出:Hello World! First!
make DEFINE_VRE= OPT=add 输出:Kelly!
make DEFINE_VRE= OPT=recover 输出:Hello World! Again!
从上面的结果中我们可以清楚的看到他们的区别了
- = 是最基本的赋值
- := 是赋予当前位置的值
- ?= 是如果没有被赋值过就赋予等号后面的值
- += 是添加等号后面的值
Makefile中=, :=, ?=和+=的含义相关推荐
- Makefile中.PHONY的含义
目录标题 含义 作用 说明 含义 单词phony (即phoney)的意思是:伪造的,假的. 在Makefile中, .PHONY后面的target表示的也是一个伪造的target, 而不是真实存在的 ...
- Makefile中 变量赋值含义
From: http://hi.baidu.com/linuxking/item/aab87527ac88550a76272c91 作者联系方式:李先静 <xianjimli at hotma ...
- makefile中 -j16的含义
make -j 用make -j带一个参数,可以把项目在进行并行编译,比如在一台双核的机器上,完全可以用make -j4,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源. 因此 ...
- makefile中一些符号的含义
先标注一个很好的makefile教程 这里归纳了如下符号的含义,请对号入座如下 $@, $^, $<, $?和=, +=, :=, ?=和:\ 和 $, $$和% section1:(自动化变量 ...
- Makefile中常用的函数
常用函数调用 语法: $(<function> <arguments>)或 ${<function><arguments>} <functi ...
- makefile中变量有哪些?
make一些参数选项: -p 选项,可以打印出make过程中的数据库, 下面研究一下内置的变量和规则. -n 选项, 只运行,不执行, -d 选项,相当于–debug=a,b(basic),v(ver ...
- Linux makefile中的= := ?=操作符
在Linux的makefile中,可以使用=,:=,?=赋值语句,但是它们的含义是不同的.下面分别说明: = 是变量在使用的时候才真正的把值赋给它,也就是说延迟赋值. := 即时赋值,不会等到真正使用 ...
- Makefile中的变量
Makefile中的变量 2007-11-03 12:03 Makefile中变量有以下几个特征: 1. Makefile中变量和函数的展开(除规则命令行中的变量和函数以外),是在make读取make ...
- Makefile中支持的函数大全
From: http://blog.chinaunix.net/uid-25365622-id-3056374.html 一.描述 Makefile的函数调用,很像变量的使用,也是以"$&q ...
最新文章
- Visual Studio视觉编程工具(推荐四个)
- ROS Gazebo(二):概述
- mybatis工具类
- POJ 3635 Full Tank?
- Java如何以及为什么使用Unsafe?
- 狗窝里的小日子- 8 ...
- 001_docker-compose构建elk环境
- 解决libreadline.so.6: cannot open shared object file: No such file or directory的问题
- 如何写好 Java 业务代码?这也是有很多规范的!
- python文件都是脚本吗_.py文件是python脚本吗
- 多角度SAR图像匹配
- IMDB排名前100名经典电影
- 《缠中说禅108课》44:小级别背驰引发大级别转折
- 济南公积金 销户 提取
- Bayes,HMM,MRF Gibbs Distribution在图像降噪中的应用
- 装逼必备:大型分布式网站术语分析
- 一本通1527欧拉回路
- SAP官网学习教程(2)创建HANA数据库
- Linux嵌入式基础知识
- 根据城市名称检索城市ID,以及省市县(LitePal+RxJava+Retrofit)