Makefile 中 = := ?= += 的使用及区别

在Makefile中我们经常看到 =、:=、?=、+= 这几个赋值运算符,他们之间的区别一直傻傻分不清,暂且总结一下。

1. "="

"=" 是最普通的等号,然而在Makefile中确实最容易搞错的赋值等号,使用”=”进行赋值,变量的值是整个makefile中最后被指定的值。

make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。

2. ":="

":=" 就表示直接赋值,赋予当前位置的值

变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

举例说明下 "=" 和 ":=" 的区别:

x = foo

y = $(x) bar

x = xyz

=》这里 y 的值将会是 xyz bar ,而不是 foo bar 。

x := foo

y := $(x) bar

x := xyz

=》这里 y 的值将会是 foo bar ,而不是 xyz bar 了。

3. "?="

"?=" 表示如果该变量没有被赋值,则赋予等号后的值。

x ?= foo

=》如果 x 在之前没有被赋值,那么 x 的值就为 foo,否则此处不进行赋值操作,如下例所示。

x := foo

x ?= xyz

=》x 的值为 foo

4. "+="

"+=" 和平时写代码的理解是一样的,表示将等号后面的值添加到前面的变量上

 

小白在 makefile 中遇到的一些坑(待继续补充)

1. Makefile中变量定义中末尾不能有空格,尽量每一行末尾都不要有空格。

2. #开头的注释的行末不能有空格加上反斜杠,否则后面的行也会被当做注释,引发异常。

 

[Makefile] 缩进与空格--记录踩过的坑: https://zhuanlan.zhihu.com/p/145439685

参考:

https://blog.csdn.net/FJDJFKDJFKDJFKD/article/details/83090568

https://blog.csdn.net/b876144622/article/details/80372161

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值