makefile中=和:=区别
时间: 2024-11-13 15:19:57 浏览: 2
makefile 中赋值符号的区别
在Makefile中,`=` 和 `:=` 是赋值操作符,它们的区别在于处理变量的方式:
1. `=` (等于):这是一个基本的赋值操作符,在遇到第一个 `=` 之前,如果目标变量已经被定义过,那么之前的值会被覆盖。也就是说,它会删除原有的值,然后插入新的值。例如:
```makefile
FOO = bar
FOO = baz
```
这将把 `FOO` 的值设为 `baz`,而之前 `bar` 的值就被忽略了。
2. `:=` (等同于):这个操作符是所谓的“隐含赋值”,它不会检查变量是否已经存在。如果变量不存在,它会直接创建并赋值;如果已经存在,就会保留原值不变。这种方式通常用于设置默认值。例如:
```makefile
FOO ?= bar
```
如果 `FOO` 变量尚未设置,`?=` 会让 `FOO` 等价于 `bar`。如果 `FOO` 已经有值,`?=` 就不会改变它的值。
总的来说,如果你希望总是替换已存在的变量值,使用 `=`;如果你想确保原有值不变,并提供默认值,就使用 `:=`。另外,`:=` 更加安全,因为它不会意外地清除已有的变量。
阅读全文