makefile中:=和?=有什么区别
时间: 2024-01-04 20:01:54 浏览: 29
在 Makefile 中,:= 和 ?= 都是赋值运算符,但它们的作用有所不同。
:= 是一种简单的赋值运算符,它表示立即展开,就是在赋值的时候就进行展开,而不是等到使用变量的时候再进行展开。这意味着,如果你在 Makefile 中使用 := 来定义一个变量,那么这个变量的值将在 Makefile 中的任何地方都可用,且其值不会受到后续的变化影响。
?= 是一种条件赋值运算符,它表示如果变量未被定义,则对其进行赋值。即,如果变量已经被定义,则不再重新赋值;否则,就将右侧的值赋给该变量。这种赋值方式可以用来定义默认值。
举个例子,假设在 Makefile 中,我们定义了一个变量 CC:
```
CC = gcc
```
如果我们使用 := 来重新定义 CC:
```
CC := clang
```
那么 CC 的值就会变成 clang。
而如果我们使用 ?= 来定义 CC 的默认值:
```
CC ?= gcc
```
那么如果 CC 已经被定义过,它的值不会改变,仍然是原来的值;否则,它的值就会被设置为 gcc。
总之,:= 是立即展开的赋值运算符,? = 是条件赋值运算符。
相关问题
makefile中的 = ?= :=
在Makefile中,=是最普通的等号赋值符号,它的作用是将右侧的值赋给左侧的变量。例如,变量A=1,表示将1赋值给变量A。
?=是条件赋值符号,它的作用是只有在变量未定义时才进行赋值。例如,如果变量A未定义,A?=1,那么A的值就是1;如果A已经定义了,那么A?=1就不会起作用,A的值保持不变。
:=是简单赋值符号,它的特点是变量的值决定于它在Makefile中的位置,而不是整个Makefile展开后的最终值。这意味着,如果在使用:=进行赋值时,变量的右侧包含了其他变量的引用,那么这些变量的值将在赋值时被解析并赋给左侧的变量。
总结一下:
- =是最普通的等号赋值符号,将右侧的值赋给左侧的变量。
- ?=是条件赋值符号,只有在变量未定义时才进行赋值。
- :=是简单赋值符号,变量的值决定于它在Makefile中的位置,而不是整个Makefile展开后的最终值。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [Makefile 中:= ?= += =的区别](https://blog.csdn.net/chenzhen1080/article/details/107135390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [Makefile 中 = := ?= += 的使用及区别](https://blog.csdn.net/shenfengchen/article/details/110792431)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
Makefile中=和:=的区别
在Makefile中,=和:=是两种不同的赋值操作符。
=是最基本的赋值操作符,用于将右边的变量值赋给左边的变量。这种赋值是“替换”式的,也就是说,当右边的变量发生改变时,左边的变量也会随之改变。
例如:
```
VAR = value
```
在这个例子中,VAR被赋值为"value"。
:=是一种更高级的赋值操作符,称为“简单展开”式赋值。它会立即展开右边的变量,并将结果赋给左边的变量。这种赋值是“赋值”式的,也就是说,左边的变量的值不会随着右边的变量的改变而改变。
例如:
```
VAR := value
```
在这个例子中,VAR被赋值为"value"。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)