Makefile中的$和$$

在linux的Makefile中,经常会见到$var和$$var的形式。下面就这两种表示方法的区别进行简单的概述。
在Makefile中的规则命令行中:
$var:将Makefile中的变量var的值,传给shell命令。
$$var:访问shell命令中定义的变量var。
经典示例代码如下所示:
var=3                       # a
target:
       echo $(var)       # b
       var=4                # c
       echo $(var)       # d
       echo $$var        # e
a:定义Makefile中的变量var,值为3
b:打印Makefile中的变量,值为3
c:定义shell命令中的变量var,值为4,Makefile的变量var不受影响
d:打印Makefile中的变量,值为3

e:打印shell命令中的变量。此时var为未定义的变量。


读者可能会奇怪,shell命令中的var明明已经定义了,为什么是未定义呢?
原因:在Makefile的规则命令,如果相互之间没有使用';\'连接起来的话,相互之间是不能共享变量的。
修改示例代码,使用';\'连接shell规则命令行。
var=3                         # a
target:
       echo $(var);\       # b
       var=4;\                # c
       echo $(var);\       # d
       echo $$var         # e
此时,b、d、e行的输出结果分别为3、3、4,符合用户的预期。
另外,在Makefile中,$$还被用来做二次扩展,即SECONDEXPANSION。
使用时,必须在最前面加上一行:
.SECONDEXPANSION    # 使用二次扩展必须添加此行
关于二次扩展,看了好几个博客,还是未能深刻理解,有待后续研究。
请各位看官,不吝赐教。
  • 3
    点赞
  • 10
    收藏
  • 2
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论 2
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值