前言
在Makefile中我们经常看到= ,:=, ?=, +=
这几个赋值运算符,那么他们有什么区别呢?
实验如下
一、例程
新建一个Makefile,内容为
ifdef DEFINE_VRE
VRE = "Hello World!"
else
endif
ifeq ($(OPT),define)
VER ?= "Hello World! First!"
endif
ifeq ($(OPT),add)
VRE += "Kelly!"
endif
ifeq ($(OPT),recover)
VER := "Hello World! Again!"
endif
all:
@echo $(VRE)
运行结果
$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 Woeld! First
$make DEFINE_VRE= OPT=add
--->Kelly
$make DEFINE_VRE= OPT=recover
--->Hello World! Again!
二、=
和:=
的区别
-
=
make会将makfile展开之后再决定变量的值,也就是说,变量的值将会是整个makefile中最终的值
x = foo
y = $(x) bar
x = xyz
在上例中,y的值是xyz bar,而不是foo bar
-
:=
:=
表示变量的值取决于变量的位置,而不是整个makefile
展开后的最终值
x := foo
y := $(x) bar
x = xyz
在上例中,y的值会是foo bar,而不是 xyz bar
总结
从上面的结果中可以看出:
=
是基本的赋值
:=
是覆盖之前的赋值
?=
是如果之前没有赋值就赋予等号后面的值
+=
是添加后面的值