您所在的位置: 首页 > 操作系统 > Linux > Linux基础 > Linux基础入门 >

深入学习Make命令和Makefile(下)(2)

http://os.51cto.com  2008-06-05 17:40  宇文  51CTO.com  我要评论(0)
  • 摘要:make是Linux下的一款程序自动维护工具,配合makefile的使用,就能够根据程序中模块的修改情况,自动判断应该对那些模块重新编译,从而保证软件是由最新的模块构成。
  • 标签:Make  Makefile  命令

二、内部规则

迄今为止,我们已经能够在makefile中给出相应的规则来指出具体的处理过程。实际上,除了我们显式给出的规则外,make还具有许多内部规则,这些规则是由预先规定的目标、依赖文件及其命令组成的相关行。在内部规则的帮助下,可以使makefile变得更加简洁,尤其是在具有许多源文件的时候。现在以实例加以说明,首先建立一个名为foo.c的C程序源文件,文件内容如下所示:

#include
#include
int main()
{
printf(“Hello World\n”);
exit(EXIT_SUCCESS);
}

现在让我们用make命令来编译它:

$ make foo
cc foo.c -o foo
$

您会惊奇地发现,尽管我们没有指定makefile,但是make仍然能知道如何调用编译器,并且调用的是cc而不是gcc编译器。这在Linux上没有问题,因为cc常常会链接到gcc程序。这完全得益于make内建的内部规则,另外这些内部规则通常使用宏,所以只要为这些宏指定新的值,就可以改变内部规则的默认动作,如下所示:

$ rm foo

$ make CC=gcc CFLAGS=”-Wall -g” foo
gcc -Wall -g foo.c -o foo
$


用make命令加-p选项后,可以打印出系统缺省定义的内部规则。它们包括系统预定义的宏、以及产生某些种类后缀的文件的内部相关行。内部规则涉及的文件种类很多,它不仅包括C源程序文件及其目标文件,还包括SCCS文件、yacc文件和lex文件,甚至还包括Shell文件。

当然,我们更关心的是如何利用内部规则来简化makefile,比如让内部规则来负责生成目标,而只指定依赖关系,这样makefile就简洁多了,如下所示:

main.o: main.c def1.h
f1.o: f1.c def1.h def2.h
f2.o: f2.c def2.h def3.h


共6页: 上一页 [1] 2 [3] [4] [5] [6] 下一页
【内容导航】
 第 1 页:构建多个目标  第 2 页:内部规则
 第 3 页:后缀规则  第 4 页:用make管理程序库
 第 5 页:Makefile和子目录  第 6 页:小结和推荐文章
微软 Windows 7 技术前瞻
DNS服务器安装优化全攻略
浏览器的战国时代
Vista SP1对决XP SP3
LAMP技术精解
 
 验证码: (点击刷新验证码)   匿名发表
  • 网络工程师考试案例动手实验营

  • 作者:郭春柱
  • 本书依据2009年版《网络工程师考试大纲》的考核要求,深入研究了历年网络工程师考试试题的命题风格和试题结构,对考查的知识点..
Copyright©2005-2008 51CTO.COM 版权所有