makefile中?=
时间: 2023-09-25 21:13:24 浏览: 39
在 Makefile 中,?= 表示如果变量没有被定义过,则赋予变量等号后面的值,如果变量已经定义过,则不改变变量的值。这种写法可以用来为变量设置默认值,如果变量已经被赋值,则不会发生覆盖。例如:
```
CC ?= gcc
```
上面的代码表示如果变量 CC 没有被定义过,则将其赋值为 gcc。如果变量已经被赋值,则不会改变它的值。
相关问题
makefile中?=
在Makefile中,"?="是一种赋值运算符,它的作用是给变量赋值,但是只有当该变量未定义时才会进行赋值。如果变量已经定义了,那么"?="运算符将不会对该变量进行赋值操作。因此,"?="可以用来设置变量的默认值,以防止重复定义变量导致的错误。在你提到的例子中,KERNELDIR ?= /lib/modules/是给变量KERNELDIR赋值,如果该变量已经定义了,那么就不会进行赋值操作,否则将其设置为/lib/modules/。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [Makefile 中:= ?= += =的区别 和条件执行](https://blog.csdn.net/u011029104/article/details/103405697)[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中4种赋值运算符(=、:=、?=、+=)](https://blog.csdn.net/weixin_42031299/article/details/119720236)[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中,=是最普通的等号赋值符号,它的作用是将右侧的值赋给左侧的变量。例如,变量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 ]