LINUX编程 Makefile中的变量详解应用

LINUX编程 Makefile中的变量详解应用

ID:41032419

大小:57.50 KB

页数:28页

时间:2019-08-14

LINUX编程 Makefile中的变量详解应用_第1页
LINUX编程 Makefile中的变量详解应用_第2页
LINUX编程 Makefile中的变量详解应用_第3页
LINUX编程 Makefile中的变量详解应用_第4页
LINUX编程 Makefile中的变量详解应用_第5页
资源描述:

《LINUX编程 Makefile中的变量详解应用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第六章:Makefile中的变量--------------------------------------------------------------------------------在Makefile中,变量就是一个名字(像是C语言中的宏),代表一个文本字符串(变量的值)。在Makefile的目标、依赖、命令中引用一个变量的地方,变量会被它的值所取代(与C语言中宏引用的方式相同,因此其他版本的make也把变量称之为“宏”)。在Makefile中变量的特征有以下几点:1.  Makefile中变量和函数的展开(除规

2、则的命令行以外),是在make读取makefile文件时进行的,这里的变量包括了使用“=”定义和使用指示符“define”定义的。2.  变量可以用来代表一个文件名列表、编译选项列表、程序运行的选项参数列表、搜索源文件的目录列表、编译输出的目录列表和所有我们能够想到的事物。3.  变量名是不包括“:”、“#”、“=”、前置空白和尾空白的任何字符串。需要注意的是,尽管在GNUmake中没有对变量的命名有其它的限制,但定义一个包含除字母、数字和下划线以外的变量的做法也是不可取的,因为除字母、数字和下划线以外的其它字符可能会在以

3、后的make版本中被赋予特殊含义,并且这样命名的变量对于一些shell来说不能作为环境变量使用。4.  变量名是大小写敏感的。变量“foo”、“Foo”和“FOO”指的是三个不同的变量。Makefile传统做法是变量名是全采用大写的方式。推荐的做法是在对于内部定义定义的一般变量(例如:目标文件列表objects)使用小写方式,而对于一些参数列表(例如:编译选项CFLAGS)采用大写方式,这并不是要求的。但需要强调一点:对于一个工程,所有Makefile中的变量命名应保持一种风格,否则会显得你是一个蹩脚的程序员(就像代码的变

4、量命名风格一样)。5.  另外有一些变量名只包含了一个或者很少的几个特殊的字符(符号)。称它们为自动化变量。像“$<”、“$@”、“$?”、“$*”等。6.1  变量的引用当我们定义了一个变量之后,就可以在Makefile的很多地方使用这个变量。变量的引用方式是:使用“$(VARIABLE_NAME)”或者“${VARIABLE_NAME}”来引用一个变量的定义。例如:“$(foo)”或者“${foo}”就是取变量“foo”的值。美元符号“$”在Makefile中有特殊的含义,所有在命令或者文件名中使用“$”时需要用两个美

5、元符号“$$”来表示。对一个变量的引用可以在Makefile的任何上下文中,目标、依赖、命令、绝大多数指示符和新变量的赋值中。这里有一个例子,其中变量保存了所有.o文件的列表:objects=program.ofoo.outils.oprogram:$(objects)  cc-oprogram$(objects)$(objects):defs.h变量引用的展开过程是严格的文本替换过程,就是说变量值的字符串被精确的展开在此变量被引用的地方。因此规则:foo=cprog.o:prog.$(foo)  $(foo)$(foo)

6、-$(foo)prog.$(foo)被展开后就是:prog.c:prog.c  cc-cprog.c通过这个例子我们可以看到变量的展开过程完全和c语言中的宏展开的过程一样,是一个严格的文本替换过程。上例中在变量“foo”被展开过程中,其值中的前导空格会被忽略。这里举这个例子的目的是为了让我们更清楚地了解变量的展开方式,而不是建议大家按照这样的方式来书写Makefile。在实际书写时,千万不要使用这种方式。否则将会给你带来很多不必要的麻烦。注意:Makefile中在对一些简单变量的应用,我们也可以不使用“()”和“{}”来标

7、记变量名,而直接使用“$x”的格式来实现,此种用法仅限于变量名为单字符的情况。另外自动化变量也使用这种格式。对于一般多字符变量的引用必须使用括号了标记,否则make将把变量名的首字母作为作为引用(“$PATH”在Makefile中实际上是“$(P)ATH”)。这一点和shell中变量的引用方式不同。shell中变量的引用可以是“${xx}”或者“$xx”格式。但在Makefile中多字符变量名的引用只能是“$(xx)”或者“${xx}”格式。一般在我们书写Makefile时,各部分变量引用的格式我们建议如下:1.  mak

8、e变量(Makefile中定义的或者是make的环境变量)的引用使用“$(VAR)”格式,无论“VAR”是单字符变量名还是多字符变量名。2.  出现在规则命令行中shell变量(一般为执行命令过程中的临时变量,它不属于Makefile变量,而是一个shell变量)引用使用shell的“$tmp”格式。3

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。