makefile 有三种赋值方式:
=、?=、:=
递归扩展赋值:当使用 = 赋值时,右侧的表达式在变量实际被使用时才进行求值(展开)
立即扩展赋值:使用 := 进行赋值时,表达式在定义时立即求值,不再依赖于变量的后续更改。
递归扩展赋值:VAR2 = new_value
VAR1 = value
VAR2 = $(VAR1)
VAR1 = new_value
条件赋值:VAR2 = value
VAR1 = value
VAR2 := $(VAR1)
VAR1 = new_value
条件赋值:使用 ?= 进行赋值时,赋值方式只在变量尚未定义或值为空的情况下设定值。
条件赋值:VAR1 ?= default_value
如果在执行 make 前或在 Makefile 中的其他地方 VAR1 已经被赋予了值,则 VAR1 不会被设置为 default_value。