简介
使用makefile编译程序时,总是看到给变量赋值的操作。但是,在makefile中,赋值有好几种写法。常见的有3种方法:
- = 赋值
- := 赋值
- ?= 赋值
这3种赋值的语法,究竟有什么区别呢?
区别
通过查询资料及试验,个人感觉这3中赋值语法的区别主要是:
- = 赋值,无论变量在makefile中被赋值多少次,最后一次赋值将被应用于整个makefile.
- :=赋值,变量在makefile中的赋值立即生效,如果变量被更改,更改也立即生效。
- ?=赋值,变量没有被定义时,定义变量并赋值。如果变量已经存在,则忽略赋值操作。
试验代码
a = hello # not the last, skip
b = $(a) world
a = okay # not the last, skip
a = OKAY # the last change is applied.
c := hello # the immediate value is applied
d := $(c) world
c := okay
e ?= hello # the first change is applied
e ?= HELLO # already exist, skip
f ?= $(e) world
e ?= world
all:
@echo "= "$(b)
@echo ":= "$(d)
@echo "?= "$(f)