makefile变量的定义

来源:互联网 发布:苹果电脑视频编辑软件 编辑:程序博客网 时间:2024/04/30 11:25
一、变量名Makefile变量名是不包括":"、"#"、"="、前置空白和尾空白的任何字符串。(1)变量名最好由字母、数字和下划线组成    尽管在GNU make中没有对变量的命名有其它的限制,但是字母、数字和下划线以外的字符可能会在make的后续版本中被赋予特殊的含义。(2)变量名大小写敏感(3)变量名中可以包含函数或者其它变量的引用(4)变量的值在长度上没有限制。值较长时可以分成多行书写,使用反斜杠(\)连接二、变量的引用(1)引用方式"$(varName)"或者"${varName}"备注:对于变量名为单字符的变量,在引用时可省略括号;对于变量名为多字符的变量不能省略括号,不然make会把变量名的首字母作为变量而不是整个字符串。(2)引用展开是严格的文本替换过程,即变量值的字符串被精确地展开在变量被引用的地方。(3)当引用未定义变量时,make默认其值为空。三、变量的定义主要有直接展开和引用展开两种方式:1、引用展开方式(1)使用"="或者指示符define定义变量 define定义变量的语法格式:以指示符"define" 开始,"endif"结束,变量名和指示符"define"在同一行,使用空格分开;指示符所在行的下一行开始一直到"endif"所在行的上一行之间的若干行的内容就是变量的值。 (2)在引用变量的地方对该变量引用的变量和函数进行展开,而不是在变量定义时展开。(3)可以引用在其后定义的其它变量,但是其的变量的定义必须在引用该变量之前。2、直接展开方式 (1)使用":="定义变量 (2)在变量定义时就展开该变量引用的变量和函数 (3)不可以引用在其后定义的变量四、高级用法1、条件赋值使用?=赋值,该操作符在变量之前没有被赋值的情况下才会对变量进行赋值2、追加赋值     使用+=给变量追加赋值(1)如果被追加值的变量之前没有定义,那么"+="会自动变成"=",此变量就被定义为一个引用展开的变量。     如果之前存在这个变量定义,那么"+="就继承之前定义时的变量风格(2)直接展开式变量的追加过程:变量使用":="定义,之后"+="操作将会先替换展开之前此变量的值,而后在末尾添加需要追      加的值,并使用":="重新给此变量赋值。(3)引用展开式变量的追加过程:变量使用"="定义,之后"+="操作时不对之前此变量中任何的引用进行替换展开,而是按照文     本的扩展方式替换(等号右边的文本未发生变化),而后在末尾添加需要追加的值,并使用":="重新给此变量赋值。3、替换引用    格式:"$(varName:A=B)"或者"${varName:A=B}"将变量中所有以A字符结尾的字替换为以B结尾的字4、override    通常在执行make时,如果通过命令行定义了一个变量,那么它将替代在Makefile中出现的同名变量的定义。就是说,对于一个在Makefile中使用常规方式(使用“=”、“:=”或者“define”)定义的变量,我们可以在执行make时通过命令行方式重新指定这个变量的值,命令行指定的值将替代出现在Makefile中此变量的值。如果不希望命令行指定的变量值替代在Makefile中的变量定义,那么我们需要在Makefile中使用指示符“override”来对这个变量进行声明,像下边那样:override VARIABLE = VALUE或者:override VARIABLE := VALUE也可以对变量使用追加方式:override VARIABLE += MORE TEXT    对于追加方式需要说明的是:变量在定义时使用了“override”,则后续对它值进行追加时,也需要使用带有“override”指示符的追加方式。否则对此变量值的追加不会生效。