现在的位置: 首页 > 综合 > 正文

变量与宏

2013年12月06日 ⁄ 综合 ⁄ 共 818字 ⁄ 字号 评论关闭

变量的类型

 

1. :=  简单扩展变量

2.  =  递归扩展变量

3.  ?= 条件赋值变量

     只会在变量值不存在时,才会进行赋值动作。这个用在接收命令行的变量设置

4. += 附加变量

 

 


用define endef定义的代码块。

define rename

      mv a b

endef

 

当宏写在命令脚本中,会自动为每行加上tab。

不过为了方便阅读,在定义宏时,每行加上tab也是可以的。 。

 

变量和宏的使用

$(变量名)

 

何时扩展变量和宏

make运行时,会分成两个阶段来完成工作。 是在第一个阶段就展开,还是在第二个阶段展开,就是所谓的简单变量和递归变量。

第一阶段make读取规则(包括工作目标,必要条件),变量,形成依存图等。

第二阶段才是真真执行的时候。

就我的理解,在第一阶段的时候,因为要形成具体的依存图,所以相关依存图的内容必须立即展开。(好吧,我就用展开吧,其实人家就是要得到这些具体的值。)否则无法产生依存图来为第二阶段的执行做好准备。 所以和规则相关的 工作目标,必要条件都是在这个阶段展开的。

但是具体的规则缺不在这个时候展开,make可以记住这些规则(也就是记住带有$符号的字符串),等到要用的时候再展开。

 

第二阶段,真正执行的时候。 因为此时对不同的工作目标,其执行的路径,时间等都不会完全一样。所以要使用“延后”展开的方法,当这个规则被调用的时候才展开,以防止执行出错。

 

再来看变量。变量的名字,包括宏的名字,是立即展开的。因为这个东东要形成依存图的。不展开,估计复杂度会提高的。

对于变量的内容来说,这个大部分是在第二阶段展开的。

除了 :=  是立即展开的。+= 看左边的变量如果原来就是简单变量,那就立即展开;否则就延后展开。

 

 

将变量导出到环境变量中

export variable-in-make = NAME
show-var:
    env | grep variable-in-make
    echo $(PWD)

这个功能在递归调用make的时候比较有用。

 

 

抱歉!评论已关闭.