《GNU make项目管理》笔记--变量与宏(2)

1.何时扩展变量

当make在处理递归变量或define指令的时候,会将变量里的每一行或宏的主体存储起来,包括换行符号,但不会予以扩展。

宏定义里的最后一个换行符号并不会被存储称宏的一部分,否则,宏被扩展时make会读进一个额外的换行符号。

当宏被扩展时,make会立即扫描被扩展的文本中是否存在宏或变量的引用,如果存在就予以扩展,如此递归进行下去。如果

宏是在命令脚本的语境中被扩展的,则宏主体的每一行都会被插入一个前导的跳格符。

下面是用来处理makefile中元素何时被扩展的准则:

1.对于变量的赋值,make会在第一阶段读进该行时,立即扩展赋值运算符左边的部分。

2.=和?=的右边部分会被延后到它们被使用的时候扩展,并且在第二阶段进行。

3.:=的右边部分会被立即扩展。

4.如果+=的左边部分原来被定义成一个简单变量,+=的右边部分就会被立即扩展,否则,它的求值动作会被延后。

5.对于宏定义,宏的变量名称会被立即扩展,宏的主体会被延后到使用的时候扩展。

6.对于规则,工作目标的必要条件总是被立即扩展,然而命令总是会延后扩展。


2.工作目标与模式的专属变量

在makefile运行期间,变量通常只有一个值,对需要经过两个处理阶段的makefile来说是这样没错。第一个阶段,make读取

makefile之后,会对变量进行赋值的扩展的动作并建立依存图。第二阶段,make会分析以及遍历依存图。所以等到make执行

命令脚本的时候,所有变量都已经处

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值