1、举例调试
ifdef DEFINE_VAR
VAR = 1
endif
ifeq ($(OPT), define)
VAR ?= 2
endif
ifeq ($(OPT), add)
VAR += 3
endif
ifeq ($(OPT), recover)
VAR := 4
endif
all:
@echo " VAR = $(VAR)"
调试结果如下:
$ make DEFINE_VAR=true
VAR = 1
$ make OPT=define
VAR = 2
$ make OPT=add
VAR = 3
$ make OPT=recover
VAR = 4
$ make DEFINE_VAR=true OPT=define
VAR = 1
$ make DEFINE_VAR=true OPT=add
VAR = 1 3
$ make DEFINE_VAR=true OPT=recover
VAR = 4
结果分析:
由前四条命令可以知道,都可以赋值(其实是废话)。
make DEFINE_VAR=true OPT=define命令说明,如果被赋值过,?=赋值不生效;
make DEFINE_VAR=true OPT=add命令说明,+=是在之前赋值的基础上追加赋值
make DEFINE_VAR=true OPT=recover命令说明,:=是覆盖之前的赋值
2、结论
= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
3、举例分析 = 和 := 的区别
举例如下
ifdef DEFINE_VAR
TMP = 1
VAR = $(TMP)
TMP = 2
else
TMP := 3
VAR := $(TMP)
TMP := 4
endif
all:
@echo " VAR = $(VAR)"
调试结果如下:
$ make DEFINE_VAR=true
VAR = 2
$ make
VAR = 3
结果分析:
make DEFINE_VAR=true命令说明,=的赋值不在于位置,而是最后赋值的值;
make命令说明,:=的赋值是按顺序解析的。