makefile中的变量代表的是文本数据,类似字符串。
makefile的变量有如下四种赋值方式
- 简单赋值 (
:=
) - 递归赋值 (
=
) - 条件赋值 (
?=
) - 追加赋值 (
+=
)
下面分别说明每种赋值方式,大家根据输出结果的不同就可以看出他们之间的区别。
简单赋值
赋值的左侧是立即变量,定义时的赋值立即有效。
boy := I am a boy
girl := $(boy)?
boy := Maybe
qa :
@echo "girl : $(girl)"
@echo "boy : $(boy)"
.PHONY : qa
输出结果是
girl : I am a boy?
boy : Maybe
递归赋值
赋值的左侧是延时变量,只有被使用时才展开定义。
boy = I am a boy
girl = $(boy)?
boy = Maybe
qa :
@echo "girl : $(girl)"
@echo "boy : $(boy)"
.PHONY : qa
输出结果是
girl : Maybe?
boy : Maybe
条件赋值
赋值的左侧是条件变量,当变量为空时才赋值。
boy := I am a boy
girl := $(boy)?
boy ?= Maybe
qa :
@echo "girl : $(girl)"
@echo "boy : $(boy)"
.PHONY : qa
输出结果是
girl : I am a boy?
boy : I am a boy
追加赋值
原变量值之后追加一个新的值,中间用空格隔开。
boy := I am a boy
girl := $(boy)?
boy += Maybe
qa :
@echo "girl : $(girl)"
@echo "boy : $(boy)"
.PHONY : qa
输出结果是
girl : I am a boy?
boy : I am a boy Maybe