Linux操作系统下makefile和make规则.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:4 大小:29KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

Linux操作系统下makefile和make规则.doc

Linux操作系统下makefile和make规则.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

信息来源:http://www.tyc91.com资料来源:http://www.tyc91.com首先介绍make实用程序的语法和常用选项,然后细剖makefile文件的组成。make命令make[选项][目标][宏定义]通过命令行参数中的target,可指定make要编译的目标,并且允许同时定义编译多个目标,操作时按照从左向右的顺序依次编译target选项中指定的目标文件。如果命令行中没有指定目标,则系统默认target指向描述文件中第一个目标文件。-d显示调试信息-n不运行任何makefile文件,只打印需要执行的命令-p输出所有宏定义和目标文件描述-s静止状态下运行,不显示任何命令行信息-ffile通知make程序从file中读取内部依赖说明,缺省情况下会读取makefile或者Makefile文件处理,文件名-表示读取标准输入,在Linux中,GNUmake工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索makefile文件注意:在源文件没有被修改的情况下,运行make命令会生成一条消息,说源文件的可执行文件是最新的,不需要用make命令重新编译和链接。要强制再创建可执行代码,需要改变源文件的上次更新时间,可以使用touch命令,然后再次运行make命令。touch[选项]文件或目录-r文件或目录把指定文件或目录的日期时间,设成和参考文件或目录的日期时间相同-d日期时间使用指定的日期时间,而非现在的时间makefile规则make程序基于文件之间的依赖性,需要建立的目标文件,以及建立目标文件时要执行的命令,以上所有被称为规则,存放在文件makefile中。定制规则的语法如下:目标列表:关联性列表命令列表注意:1.可以在关联性列表和命令列表中使用shell文件名模式匹配字符,例如?、*、[]等等。2.如果目标的命令列表中某个命令前面带有@,那么当make程序执行时,该命令是不会有反应的,在程序运行完毕之后,所有前面带@的命令按照反序执行。可以通过执行make-n命令显示这些命令以供查看。3.如果目标的命令列表中某个命令前面带有-,说明如果该命令执行有误,会跳过该命令并继续执行。make程序使用makefile中的规则决定程序中需要重新编译的文件,并再次链接生成可执行代码。如果源文件上修改的时间戳比目标文件上的时间戳更新,那么make重新编译build中包含的源文件。例如,如果修改了一个.h头文件,make程序就会重新编译所有包含该头文件的源文件,前提是头文件在这些源文件的目标文件的关联性列表中;再如某.c源文件被修改,那么该源文件被重新编译,生成对应的新的目标文件。myprog:foo.obar.ogcc–omyprogfoo.obar.ofoo.o:foo.cfoo.hbar.hgcc–ofoo.o–cfoo.cbar.o:bar.cbar.hgcc–obar.o–cbar.c上述规则中,只要目标文件比冒号后面的文件任何一个旧,将会执行下一行的命令;但是在检查foo.o和bar.o的时间之前,会往下查找那些把foo.o和bar.o作为目标文件的规则;以此类推,并最终回到myprog规则。如何得到每个C文件的输出规则呢?可使用-M和-MM编译选项。注意:使用-M和-MM编译选项时,仅在shell中输出规则信息,不能用于产生可执行文件,即不能写成gcc-ohello-Mhello.c这样的形式。gcc–Mhello.c//输出hello.c和该文件中所有<>和””包含的头文件gcc–MMhello.c//仅输出hello.c和该文件中所有””包含的头文件后缀(隐含)规则make-p命令显示了所有后缀规则列表。为了建立一个目标,make使用程序会遍历一连串的依赖关系,从而决定从何处开始建立。如果没有找到目标文件,make程序按照优先顺序查找源文件,首先查找.c、.f或.s后缀的文件,然后再查找SCCS(带.c~后缀)文件,如果没有找到任何一个源文件,make程序就会报告一个异常。make程序知道调用gcc-cxxx.c-oxxx.o的预定义命令,而且还知道目标文件通常和源文件是相同的,这种功能称作标准依赖性,所以foo.o:foo.cfoo.hbar.h这样的语句可以简写成foo.o:foo.hbar.h。同时,如果把生成foo.o和bar.o的命令从规则中删除,make将自动查找它的隐含规则(gcc-M/MM输出的代码),然后找到一个适当的命令,命令中会使用一些变量,并且按照一定步骤设定。因此,上述makefile的内容可以根据后缀规则简写成:myprog:foo.obar.ogcc–omyp