如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
1Makefile1.1makefileGNUmake用来构建和管理一个的工程,使整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入一些时间去完成一个或者多个称之为Makefile文件的编写。Makefile文件描述了整个工程的编译、连接等规则,其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。Makefile描述了工程中所有文件的编译顺序、规则,它有自己的书写格式、关键字和函数。为工程编写Makefile的好处是能够使用一行命令来完成“自动化编译”,极大提高了效率。我们还可以使用make工具来做一些其它的事。例如,有这样的需求:当我们修改了某个或者某些文件后,需要能够根据修改的文件来自动对相关文件进行重建或者更新。GNUmake工具为我们实现这个目的提供了非常有利的支持。。make执行时,根据Makefile的规则检查文件的修改情况,决定是否执行定义的动作,那些修改过的文件将会被重新编译。1.2makefile一个简单的Makefile描述规则组成:TARGET...:PREREQUISITES...COMMAND...target:规则的目标。可以是.o文件、也可以是最后的可执行程序的文件名。另外,目标也可以是一个make执行的动作的名称,如目标“clean”,此目标没有依赖,只有命令。它所指定的命令用来删除make过程产生的中间文件(清理工作)。prerequisites:规则的依赖。生成规则目标所需要的文件名列表。通常一个目标依赖于一个或者多个文件。command:规则的命令行。是make程序所要执行的动作。一个规则可以有多个命令行,每一条命令占一行。注意:每一个命令行必须以[Tab]字符开始,[Tab]字符告诉make此行是一个命令行。make按照命令完成相应的动作。2.makefile2.1Maekfile中表示一个单一的文件名时可使用通配符。可使用的通配符有:“*”、“?”和“[…]”。Makefile中统配符可以出现在以下两种场合:1.可以用在规则的目标、依赖中,此时make会自动将其展开;print:*.clpr-p$?touchprint2.可出现在规则的命令中,其展开是在执行此命令时完成。clean:rm-f*.o除这两种情况之外的其它上下文中,不能直接使用通配符。二是需要通过函数“wildcard”来实现。如果规则中的某一个文件的文件名包含作为统配符的字符(“*”、“.”字符),在使用文件时需要对文件名中的统配字符进行转义处理,使用反斜线(\)来进行通配符的转义。例如“foo\*bar”,在Makefile中它表示了文件“foo*bar”。2.2在一个较大的工程中,一般会将源代码和二进制文件(.o文件和可执行文件)安排在不同的目录来进行区分管理。这种情况下,我们需要使用make提供的目录自动搜索依赖文件功能(在指定的若干个目录下搜索依赖文件)。2.2.1VPATH变量“VPATH”的定义中,使用空格或者冒号(:)将多个目录分开。例如对变量的定义如下:VPATH=src:../headers它指定了两个搜索目录,“src”和“../headers”。对于规则“foo:foo.c”如果“foo.c”在“src”目录下,此时此规则等价于“foo:src:/foo.c”。2.2.2vpath它的使用方法有三种:1、vpathPATTERNDIRECTORIES为符合模式“PATTERN”的文件指定搜索目录“DIRECTORIES”。多个目录使用空格或者冒号(:)分开。“PATTERN”需要包含模式字符“%”。“%”意思是匹配一个或者多个字符,例如,“%.h”表示所有以“.h”结尾的文件。例如:vpath%.h../headers其含义是:Makefile中出现的.h文件;如果不能在当前目录下找到,则到目录“../headers”下寻找。2、vpathPATTERN清除之前为符合模式“PATTERN”的文件设置的搜索路径。3、vpath清除所有已被设置的文件搜索路径。2.3makefile伪目标不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签。使用伪目标有两点原因:1.避免在我们的Makefile中定义的只执行命令的的目标和工作目录下的实际文件出现名字冲突。