Makefile中的 = ?= := +=直接的区别
来源:互联网 发布:预告片 知乎 编辑:程序博客网 时间:2024/06/07 07:16
Makefile中在定义变量的时候,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来定义变量的值是=方式和:=方式。
在说明两者直接的不同时,先来说明下使用的变量。在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字符串,
在Makefile中执行的时候其会自动原模原样地展开在使用的地方。其与C/C++所不同的是,你可以在Makefile中改变其值。在Makefile中,变量可以使用在“目标”,“依赖目标”,“命令”或是Makefile的其它部分中
第一种方式:也就是简单的使用“=”号,在“=”左侧是变量,右侧是变量的值,右侧变量的值可以定义在文件的任何一处,也就是说,右侧中变量不一定非要是已定义好的值,其可以使用后面定义的值如:
foo = $(bar)bar = $(ugh)ugh = Huh?all:echo $(foo)
我们执行“make all”将会打出变量$(foo)的值是“Huh?”( $(foo)的值是$(bar),$(bar)的值是$(ugh),$(ugh)的值是“Huh?”)可见,变量是可以使用后面的变量来定义的。而对于上面重复定义的变量,要用最后更新的变量来确定值,例如:
x = foo y = $(x) bar x = xyz 在上例中,y的值将会是 xyz bar ,而不是 foo bar 。第二种方式:也就是“:=”,表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值
x := fooy := $(x) barx := later其等价于:y := foo barx := later
前面的变量不能使用后面的变量,只能使用前面已定义好了的变量,例如:
y := $(x) bar
x := foo
那么,y的值是“bar”,而不是“foo bar”。
对于上其他两者的区别是:
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
例子:
ifdef DEFINE_VRE VRE = “Hello World!”elseendififeq ($(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!
0 0
- Makefile中的 = ?= := +=直接的区别
- makefile中的=与:=的区别
- Makefile中的?= := += =的区别
- Makefile 中的 “=”,“:=”,“?=”,“+=”的区别
- 区别makefile中的 = := ?= +=
- linux Makefile中的:=, =, ?=的区别
- Linux Makefile中的:=, =, ?=的区别
- makefile中的=与:=区别
- Makefile '=' ':='区别
- [makefile]makefile中 '=', ':=', '?=', '+='的区别
- Makefile 中 = := ?= 的区别
- Makefile 中 = := ?= 的区别
- 关于makefile的=: =? =+区别
- Makefile = 、:=、?=的区别
- Makefile中”=“”?=“”+=“的区别
- makefile 里面 := 和 = 的区别
- Makefile中=与:=的区别
- Makefile中=与:=的区别
- Leetcode263. Ugly Number
- linux man 手册各个章节的意义和用法 .
- mysql的write skew问题
- 对PAR DAR SAR的理解
- Windows下编译VLC2.2.1
- Makefile中的 = ?= := +=直接的区别
- html头部文件-head解析
- 3章 上机习题
- java中Map,List与Set的区别
- Java集合系列之ArrayList
- 欢迎使用CSDN-markdown编辑器
- Ubuntu 更改文件夹权限及chmod详细用法
- 第4章 处理用户输入与显示数据------------(getopt命令)
- yum install需要公钥 | fedora25安装 mplayer