Makefile中赋值等号:=, =, ?=和+=的含义和区别
2024-07-22
41
前言
在Makefile语法中,时不时会见到各种“=”号的赋值语句,除了常见的“=”和“:=”,还有“?=”和“+=”,那么这些赋值等号分别表示什么含义呢?
“=”的含义
“=”是最普通的等号,然而在Makefile中确实最容易搞错的赋值等号,使用”=”进行赋值,变量的值是整个makefile中最后被指定的值。不太容易理解,举个例子如下:
VIR_A = A
VIR_B = $(VIR_A) B
VIR_A = AA
经过上面的赋值后,最后VIR_B的值是AA B,而不是A B。在make时,会把整个makefile展开,拉通决定变量的值
“:=”的含义
相比于前面“最普通”的”=”,”:=”就容易理解多了。”:=”就表示直接赋值,赋予当前位置的值。同样举个例子说明
VIR_A := A
VIR_B := $(VIR_A) B
VIR_A := AA
最后变量VIR_B的值是A B,即根据当前位置进行赋值。因此相比于”=”,”:=”才是真正意义上的直接赋值。
“?=”的含义
“?=”表示如果该变量没有被赋值,则赋予等号后的值。举例:
VIR ?= new_value
如果VIR在之前没有被赋值,那么VIR的值就为new_value.
VIR := old_value
VIR ?= new_value
这种情况下,VIR的值就是old_value
“+=”的含义
“+=”和平时写代码的理解是一样的,表示将等号后面的值添加到前面的变量上
更新于:1个月前赞一波!2
相关文章
- ES6新特性: 解构赋值
- composer install、update、require 区别
- .NET中Task和ValueTask的区别
- PHP 函数传值和传引用的区别
- require 和 include 的区别
- C#中异步编程时使用Task.Factory.StartNew和Task.Run的区别
- Navicat Premium 和 Navicat for MySQL 的区别
- .NET8 Blazor三种模式的区别和使用场景
- C++释放new分配内存时带方括号delete[]和不带方括号delete的区别
- c语言中s的含义,C语言%s是什么意思
- 在Java中如何把两个对象相同属性赋值
- Windows常见标准错误代码含义参考
- Linux标准错误代码含义参考(perror获取结果)
- Shadowsocks各个加密算法的区别
- 程序员和码农的区别:解析软件开发领域的两种角色
- java中get请求和post请求的区别
- .NET奇数和偶数版本的区别
- .NET7和.NET8的区别
- ASP.NET MVC和ASP.NET Core的区别是什么?
- Makefile:10: *** missing separator. Stop
文章评论
全部评论