Makefile简介

Makefile简介

ID:39465973

大小:82.50 KB

页数:6页

时间:2019-07-04

Makefile简介_第1页
Makefile简介_第2页
Makefile简介_第3页
Makefile简介_第4页
Makefile简介_第5页
资源描述:

《Makefile简介》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Dept:AP产品部Auth:刘艳波2021-9-2GNUMakefile简介1.基本makefile结构GNUMake的主要工作是读进一个文本文件:makefile。这个文件里主要是有关哪些文件(‘target’目的文件)是从哪些别的文件(‘dependencies’依靠文件)中产生的,用什么命令来进行这个产生过程。有了这些信息,make会检查硬盘上的文件,如果目的文件的时间戳(该文件生成或被改动时的时间)比至少它的一个依靠文件旧的话,make就执行相应的命令,以便更新目的文件。(目的文件不一定是最后的可执行文件,它可以是任何一个文件,甚至是一个不存在的文件)makefile一般被

2、叫做“makefile”或“Makefile”。当然也可以在make的命令行通过-f参数指定别的文件名。如果不特别指定,它会寻找当前目录下的“makefile”或“Makefile”文件,因此使用这两个名字是最简单的。一个makefile主要含有一系列的规则,如下::(tab)(tab)例如,考虑以下的makefile文件:这是一个非常基本的makefile。make从最上面开始,把上面第一个目的:‘myprog’,做为它的主要目标(一个它需要保证其总是最新的最终目标)。给出的规则说明只要文件‘myprog’

3、比文件‘foo.o’或‘bar.o’中的任何一个旧,下一行的命令将会被执行。但是,在检查文件foo.o和bar.o的时间戳之前,它会往下查找那些把foo.o或bar.o做为目标文件的规则。它找到的关于foo.o的规则,该文件的依靠文件是foo.c,foo.h和bar.h。它从下面再找不到生成这些依靠文件的规则,它就开始检查磁碟上这些依靠文件的时间戳。如果这些文件中任何一个的时间戳比foo.o的新,命令'gcc-ofoo.ofoo.c'将会执行,从而更新文件foo.o。接下来对文件bar.o做类似的检查,依靠文件在这里是文件bar.c和bar.h。现在,make回到‘myprog’的规

4、则。如果刚才两个规则中的任何一个被执行,myprog第6页总6页Dept:AP产品部Auth:刘艳波2021-9-2就需要重建(因为其中一个.o就会比‘myprog’新),因此连接命令将被执行。到此,可以看出使用make工具来建立程序的好处——源码文件里一个简单改变都会造成那个文件被重新编译(因为.o文件依靠.c文件),进而可执行文件被重新连接(因为.o文件被改变了)。其实真正的得益是在当改变一个header文件的时候——我们不再需要记住那个源码文件依靠它,因为所有的信息都在makefile里。make会很轻松的替我们重新编译所有那些因依靠这个header文件而改变了的源码文件,如有

5、需要,再进行重新连接。1.编写make规则(Rules)最明显的编写规则的方法是一个一个的查看源码文件,把它们的目标文件做为目的,而C源码文件和被它#include的header文件做为依靠文件。但是也要把其它被这些header文件#include的header文件也列为依靠文件,还有那些被包括的文件所包括的文件……然后你会发现要对越来越多的文件进行管理,然后你的头发开始脱落,你的脾气开始变坏,你的脸色变成菜色,你走在路上开始跟电线杆子碰撞,终于你捣毁你的电脑显示器,停止编程。到低有没有些容易点儿的方法呢?当然有!向编译器要!在编译每一个源码文件的时候,编译器实在应该知道应该包括什么

6、样的header文件。使用gcc的时候,用-M开关,它会为每一个指定的C文件输出一个规则,把目标文件做为目的,而这个C文件和所有应该被#include的header文件将做为依靠文件。注意这个规则会加入所有header文件,包括被角括号(`<',`>')和双引号(`"')所包围的文件。其实我们可以相当肯定系统header文件(比如stdio.h,stdlib.h等等)不会被我们更改,如果用-MM来代替-M传递给gcc,那些用角括号包围的header文件将不会被包括。(这会节省一些编译时间)。由gcc输出的规则不会含有命令部分;可以自己写入我们需要的命令或者也可以什么也不写,而让mak

7、e使用它的隐含的规则。2.Makefile变量上面提到makefiles里主要包含一些规则。它们包含的其它的东西是变量定义。makefile里的变量就像一个环境变量(environmentvariable)。事实上,环境变量在make过程中被解释成make的变量。这些变量是大小写敏感的,一般使用大写字母。它们可以从几乎任何地方被引用,也可以被用来做很多事情,比如:1.贮存一个文件名列表。在上面的例子里,生成可执行文件的规则包含一些目标文件名做为依靠。在这个

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

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

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