makefile变量

:“$(VARIABLE_NAME)”变量引用的展开过程是严格的文本替换过程,就是说变量值得字符串被精确的展开在变量被引用的地方。
     Makefile中对一些简单变量的引用,我们可以不用”()”和”{}”来标记变量名,不过这种用法仅仅限于变量名为单字符的情况,谨记,不然会出现不好玩的事情。
一般在书写makefile格式如下:
1.make 变量( Makefile 中定义的或者是 make 的环境变量)的引用使用“ $(VAR)”格式,无论“ VAR”是单字符变量名还是多字符变量名。
2. 出现在规则命令行中 shell 变量(一般为执行命令过程中的临时变量,它不属于
Makefile 变量,而是一个 shell 变量)引用使用 shell 的“ $tmp”格式。
3. 对出现在命令行中的 make 变量我们同样使用“ $(CMDVAR)
递归展开变量:可以在引用其他的之前没有定义的变量(可能在后续部分定义,或者通过make的命令行选项传递的变量)。
直接展开式变量:这种风格的变量使用“:=”定义。在使用”:=”定义变量时,变量值中对其他量或者函数的引用在定义变量时被展开(对变量进行替换)。
定义一个空格:
nullstring:
space:=$(nullstring)  
“?=”条件赋值,只有此变量在之前没有赋值的情况下才会对变量赋值。FOO?=bar.含义是如果变量“FOO”在之前没有定义,就给它赋值“bar”,否则不改变它的值。
对于一个已经定义的变量,可以使用“替换引用”将其值中的后缀字符(串)使用 指定的字符(字符串)替换。格式为“ $(VAR:A=B)”(或者“ ${VAR:A=B}”),意思是, 替换变量“ VAR”中所有“ A”字符结尾的字为“ B”结尾的字。“结尾”的含义是空格 之前(变量值多个字之间使用空格分开)。而对于变量其它部分的“ A”字符不进行替 换。例如:
foo:= a.o b.o c.o
bar:=$(foo:.o=.c)
这个就是把变量的尾字符o替换为c,其他部分不变。
我们在写makefile时,应尽量避免使用套嵌的变量引用,在一些必须的地方,也最好不要使用高于两级的套嵌引用。
定义一个变量时需要明确一下几点:
变量名之中可以包含函数或者其他变量的引用
变量的定义值在长度上没有限制,在变量定义较长时,一个好的做法就是分解多行来实现。
当引用一个没有定义的变量时,make默认他的值为空
一些特殊的变量在make中有内嵌固定的值。
有一些由两个符号组成的特殊变量,称之为自动环变量,他们的值不能再makefile中进行显示的修改。这些变使用在规则中时,不同规则会被赋予不同的值。
如果想对一个之前没有定义过的变量进行赋值,那么可以用“?=”来实现
在 Makefile 中使用“ +=”(追加方式) 来实现对一个变量值的追加操作。就像:objects+=another.o
当我们在命令行重新指定一个变量的值,那么我们需要在makefile中使用指示符“override”来对这个变量进行声明,override VAREABLE=VALUE,变量在定义“override”之后,那么后续对它的值进行追加时,也需要使用带有“override”指示符的追加方式,否则对此变量值的追加不会生效。
Define定义变量的格式:以指示符“define”开始,“endif”结束,之间的所有内容就是所定义变量的值。
    如果在makefile中定义一个变量,那么这个变量对于此makefile的所有规则都是有效的,如果要对其他的makefile中规则有效,那么就需要使用“export”对它进行声明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值