Makefile学习笔记-------------Makefile中的变量

Makefile中变量的特征:

Makefile中变量的特征:

1.Makefile中变量和函数的展开(除规则的命令行以外),是在make读取makefile文件时进行的。这里的变量包括了使用"="定义和使用指示符"define"定义的。

2.变量可以用来代表一个文件名列表、编译选项列表、程序运行的选项参数列表、搜索源文件的目录列表、便以输出的目录列表等等。

3.变量名是不包括":"、"#"、"="前置空白和尾空白的任何字符串。

4.变量名是大小写敏感的。

5.另外有一些变量名只包含了一个或者很少的几个特殊的字符。

变量的引用:

$(VARIABLE_NAME) 或 ${VARIABLE_NAME}来引用一个变量的定义。

所有在命令或者文件名中使用"$"时需要用"$$"来表示。

变量的定义:

1.递归展开式变量:

变量的定义是通过"="或者使用指示符"define"定义的变量。对这种变量的引用,在引用的地方是严格的文本替换过程,此变量值的字符串原模原样的出现在引用它的地方。(变量在引用它的地方进行替换展开的同时,它说引用的其它变量才会被替换展开)

优点:在定义时,可以引用其它的之前没有定义的变量

缺点:

1.可能会由于出现变量的递归定义而导致make陷入到无限的变量展开过程中,最终使make执行失败.

2.风格变量的定义中如果使引用了某一个函数,那么函数总会在其被引用的地方被执行。

 

2.直接展开式变量

通过":="来定义变量。变量值中对另外变量的引用或者函数的引用在定义时被展开。所以在变量定义后就是一个实际所需要定义的文本串,其中不再包含任何对其它变量的引用。

 

3.定义一个空格

nullstring =

space := $(nullstring) #end of the line

 

4.条件赋值

条件赋值操作符"?=", 只有此变量在之前没有赋值的情况下才会对这个变量进行赋值。

例如: FOO ?= bar 等价于:

ifeq(&(origin FOO), undefined)

    FOO = bar

endif

 

变量的替换引用:

$(VAR:A=B):替换变量"VAR"中所有"A"字符结尾的字为"B"结尾的字。“结尾”的含义是空格之前。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值