makefile规则的语法

makefile规则的语法

ID:15391154

大小:63.00 KB

页数:13页

时间:2018-08-03

makefile规则的语法_第1页
makefile规则的语法_第2页
makefile规则的语法_第3页
makefile规则的语法_第4页
makefile规则的语法_第5页
资源描述:

《makefile规则的语法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、makefile规则的语法通常一条规则形式如下:targets:prerequisites       command       ...或:targets:prerequisites;command       command       ...目标(target)是文件的名称,中间由空格隔开。通配符可以在文件名中使用(参阅在文件名中使用通配符),‘a(m)’形式的文件名表示成员m在文件a中(参阅档案成员目标)。一般情况下,一条规则只有一个目标,但偶尔由于其它原因一条规则有多个目标(参阅具有多个目标的规则)。命令行以Tab字符开始,第一个命令可以和依赖在一行,命令和依赖之间用分号隔开,也

2、可以在依赖下一行,以Tab字符为行的开始。这两种方法的效果一样,参阅在规则中使用命令。因为美元符号已经用为变量引用的开始符,如果您真希望在规则中使用美元符号,您必须连写两次,‘$$’(参阅使用变量)。您可以把一长行在中间插入‘’使其分为两行,也就是说,一行的尾部是’’的话,表示下一行是本行的继续行。但这并不是必须的,make没有对makefile文件中行的长度进行限制。一条规则可以告诉make两件事情:何时目标已经过时,以及怎样在必要时更新它们。判断目标过时的准则和依赖关系密切,依赖也由文件名构成,文件名之间由空格隔开,通配符和档案成员也允许在依赖中出现。一个目标如果不存在或它比其中一

3、个依赖的修改时间早,则该目标已经过时。该思想来源于目标是根据依赖的信息计算得来的,因此一旦任何一个依赖发生变化,目标文件也就不再有效。目标的更新方式由命令决定。命令由shell解释执行,但也有一些另外的特点。参阅在规则中使用命令。4.2在文件名中使用通配符一个简单的文件名可以通过使用通配符代表许多文件。Make中的通配符和Bourneshell中的通配符一样是‘*’、‘?’和‘[…]’。例如:‘*.C’指在当前目录中所有以‘.C’结尾的文件。字符‘~’在文件名的前面也有特殊的含义。如果字符‘~’单独或后面跟一个斜杠‘/’,则代表您的home目录。如‘~/bin’扩展为‘/home/bin’

4、。如果字符‘~’后面跟一个字,它扩展为home目录下以该字为名字的目录,如‘~John/bin’表示‘home/John/bin’。在一些操作系统(如ms-dos,ms-windows)中不存在home目录,可以通过设置环境变量home来模拟。在目标、依赖和命令中的通配符自动扩展。在其它上下文中,通配符只有在您明确表明调用通配符函数时才扩展。通配符另一个特点是如果通配符前面是反斜杠‘’,则该通配符失去通配能力。如‘foo*bar’表示一个特定的文件其名字由‘foo’、‘*’和‘bar’构成。4.2.1通配符例子   通配符可以用在规则的命令中,此时通配符由shell扩展。例如,下面的规

5、则删除所有OBJ文件:clean: rm–f *.o   通配符在规则的依赖中也很有用。在下面的makefile规则中,‘makeprint’将打印所有从上次您打印以后又有改动的‘.c’文件:print:*.c       lpr-p$?       touchprint本规则使用‘ptint’作为一个空目标文件(参看使用空目标文件记录事件);自动变量‘$?’用来打印那些已经修改的文件,参看自动变量。当您定义一个变量时通配符不会扩展,如果您这样写:objects=*.o变量objects的值实际就是字符串‘*.o’。然而,如果您在一个目标、依赖和命令中使用变量objects的值,通配符将在

6、那时扩展。使用下面的语句可使通配符扩展:objects=$(wildcard*.o)详细内容参阅函数wildcard。4.2.2使用通配符的常见错误下面有一个幼稚使用通配符扩展的例子,但实际上该例子不能完成您所希望完成的任务。假设可执行文件‘foo’由在当前目录的所有OBJ文件创建,其规则如下:objects=*.o foo:$(objects)       cc-ofoo$(CFLAGS)$(objects)由于变量objects的值为字符串‘*.o’,通配符在目标‘foo’的规则下扩展,所以每一个OBJ文件都会变为目标‘foo’的依赖,并在必要时重新编译自己。但如果您已删除了所有的OB

7、J文件,情况又会怎样呢?因没有和通配符匹配的文件,所以目标‘foo’就依靠了一个有着奇怪名字的文件‘*.o’。因为目录中不存在该文件,make将发出不能创建‘*.o’的错误信息。这可不是所要执行的任务。实际上,使用通配符获得正确的结果是可能的,但您必须使用稍微复杂一点的技术,该技术包括使用函数wildcard和替代字符串等。详细内容将在下一节论述。微软的操作系统(MS-DOS、MS-WINDOWS)使用反斜杠分离目录路径

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

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

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