在Makefile中,?= 和 := 是两种不同的变量赋值操作符,区别如下:
1. ?= 延迟赋值操作符
当使用 ?= 进行赋值时,会进行延迟赋值,也就是说,只有在变量之前没有被赋值的情况下,才会将右侧的值赋给变量。如果变量已经有值,那么 ?= 不会改变它的值。例如:
NAME ?= ledc
如果在Makefile中已经存在对 NAME`的赋值,那么这行代码不会改变 NAME 的值。如果之前没有对 NAME 进行赋值,那么它会被赋值为 "ledc"。
2. := 立即赋值操作符
当使用 := 进行赋值时,会立即将右侧的值赋给变量,并且该赋值操作会忽略之后对变量的重新赋值操作。例如:
OBJS := start.o main.o
不管之后是否有其他对 OBJS 的赋值,它的值都会保持为 "start.o main.o"。
综合起来,?= 用于设置变量的默认值,但只在变量未定义时才生效。而 := 用于立即赋值,并且不受后续重新赋值的影响。
在Makefile中,?= 和 := 的区别?
于 2023-08-24 23:03:48 首次发布