makefile详解 变量

定义变量

makefile的变量定义有三种方式

1.        立即赋值 a:=b

2.        延迟赋值 a=b

3.        条件赋值 a?=b

4.        附加赋值 a+=b

它们之间的区别是,

第一种方式,会立即计算b的值,并赋值给a;

第二种方式,相当于C++和java的引用。如果后面b的值改变了,那么a的值也会改变;

第三种方式,如果a没有定义,则相当于a=b ,否则不执行任何操作;

第四种方式,将b的值添加到a原有的值后面,再赋值给a。

 

获取变量值

$(var) //表示取变量var的值,记得当变量名多于一个字符时,使用”()”.

 

定义宏

define function

xxx // 具体的内容

endef

需要指出的是,虽然形式上类似函数,但是实际内容只是字符串替换,这与C中的宏函数是一样的。

 

什么时候计算变量

makefile的解析分为两个阶段,第一阶段生成规则和依赖关系,第二阶段执行规则;

只有立即展开的变量会在第一阶段计算,而延后展开的变量会在第二阶段计算。

立即与延后展开的规则

表达式

何时扩展a

何时扩展b

a=b

立即

延后

a?=b

立即

延后

a:=b

立即

立即

a+=b

立即

取决于之间a的定义方式
如果是a:=,在立即
否则延后

define a
b …
endef

立即

延后

a : b
    c …

立即

立即
(命令中的变量,即变量c是延后展开)

你可能感兴趣的:(makefie)