makefile中?=
时间: 2023-09-25 09:13:24 浏览: 62
在 Makefile 中,?= 表示如果变量没有被定义过,则赋予变量等号后面的值,如果变量已经定义过,则不改变变量的值。这种写法可以用来为变量设置默认值,如果变量已经被赋值,则不会发生覆盖。例如:
```
CC ?= gcc
```
上面的代码表示如果变量 CC 没有被定义过,则将其赋值为 gcc。如果变量已经被赋值,则不会改变它的值。
相关问题
makefile中?=
在Makefile语法中,使用?=运算符可以在变量未定义时设置变量的默认值。如果变量已经定义,则该语句不起作用。这种方式定义的变量是非递归的,即变量的值在定义时被计算,而不是在使用时被计算。
例如,以下是在Makefile中使用?=定义变量的示例:
```
SRC_FILES ?= main.cpp foo.cpp bar.cpp
```
这个语句定义了一个名为SRC_FILES的变量,如果变量未定义,则其值为"main.cpp foo.cpp bar.cpp"。如果变量已经定义,则该语句不起作用。在这个例子中,SRC_FILES是一个非递归变量,其值在定义时被计算。
需要注意的是,在Makefile中,变量的作用域是全局的,即在整个Makefile中,所有的规则和命令都可以访问同一组变量。因此,需要谨慎使用变量,避免不必要的命名冲突。
makefile中:=和?=有什么区别
在 Makefile 中,:= 和 ?= 都是赋值运算符,但它们的作用有所不同。
:= 是一种简单的赋值运算符,它表示立即展开,就是在赋值的时候就进行展开,而不是等到使用变量的时候再进行展开。这意味着,如果你在 Makefile 中使用 := 来定义一个变量,那么这个变量的值将在 Makefile 中的任何地方都可用,且其值不会受到后续的变化影响。
?= 是一种条件赋值运算符,它表示如果变量未被定义,则对其进行赋值。即,如果变量已经被定义,则不再重新赋值;否则,就将右侧的值赋给该变量。这种赋值方式可以用来定义默认值。
举个例子,假设在 Makefile 中,我们定义了一个变量 CC:
```
CC = gcc
```
如果我们使用 := 来重新定义 CC:
```
CC := clang
```
那么 CC 的值就会变成 clang。
而如果我们使用 ?= 来定义 CC 的默认值:
```
CC ?= gcc
```
那么如果 CC 已经被定义过,它的值不会改变,仍然是原来的值;否则,它的值就会被设置为 gcc。
总之,:= 是立即展开的赋值运算符,? = 是条件赋值运算符。
阅读全文