【makefile符号】makefile 中的几种等号赋值(=、:=、?=)

比较好理解的是 ?= ,比较难以区分的是 := 和 =

  • ?=        如果变量已经被赋值,那就不再重新赋值
  • :=         立即赋值,取值时展开
  •  =         变量被使用时展开

        目录

1、?= 

2、:=

3、 =


1、?= 

VAR = hello        # 初次赋值
VAR ?= world       # 发现已经赋值就不再重新赋值

all:
        @echo $(VAR)

2、:=

如果赋的值是一个常量,效果等价于 ' ' ;如果赋的值是一个变量,那么在赋值的时候就会把这个变量展开。所谓展开,可以理解为把变量的值取出来。

:= 相当于把P的值取出来拷贝一份赋给 VAR,此后 P 的改变都不会影响到 VAR

P = hello
VAR := $(P)    # 立即展开,就相当于 VAR := hello
P = world      

all:
        @echo $(VAR)

3、 =

如果赋的值是一个常量,效果等价于 ' := ';如果赋的值是一个变量,只有在使用的时候才会把变量展开。相当于只有在使用的时候才会把变量的值取出来。

= 相当于把 P 的地址给了 VAR,取出来的结果还是 P 的内容。

P = hello
VAR = $(P)   
P = world      # 后续VAR的值会受到 P 的影响

all:
        @echo $(VAR)

  

猜你喜欢

转载自blog.csdn.net/challenglistic/article/details/129638985