
LinuxUnix环境下的Make和Makefile详解.pdf
5页会员控制台 会员登陆 会员注册 最后更新 高级搜索 会员投稿 退出登陆 2007年 12月 28日 星期五 丁亥年十一月十九设为首页 收藏本站 留言给我首页 | 操作系统类 | 程序设计类 | 数据库类 | 应用服务类 | 网络及硬件类 | 其他技术 | GBunix论坛操作系统类 Linux BSD Solaris AIX SCO UNIX 程序设计类 SHELL Java/j2ee C/C++ ASP/ASP.Net 其他程序 数据库类 Oracle Mysql Postgresql Informix Sybase DB2 应用服务类 WebServer NameServer MailServer FTP服务器 其他应用 网络及硬件类 售前配置 /技术方案 网络与通信技术 其他技术 电脑横机技术 Unix中文 / 操作系统类 / Linux / Linux/Unix环境下的 Make和 Makefile详解 Linux/Unix环境下的 Make和 Makefile详解2005-01-21 Pathetique 博客园 点击 : 25472Linux/Unix环境下的 Make和 Makefile详解 无论是在 Linux还是在 Unix环境中, make都是一个非常重要的编译命令。
不管是自己进行项目开发还是安装应用软件,我们都经常要用到 make或 make install利用 make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用 make和 makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系而且如此多的源文件,如果每次都要键入 gcc命令进行编译的话,那对程序员来说简直就是一场灾难而 make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译因此,有效的利用 make和 makefile工具可以大大提高项目开发的效率同时掌握 make和 makefile之后,您也不会再面对着 Linux下的应用软件手足无措了 但令人遗憾的是,在许多讲述 Linux应用的书籍上都没有详细介绍这个功能强大但又非常复杂的编译工具在这里我就向大家详细介绍一下 make及其描述文件 makefile Makefile文件 Make工具最主要也是最基本的功能就是通过 makefile文件来描述源程序之间的相互关系并自动维护编译工作而 makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。
makefile 文件是许多编译器 --包括 Windows NT 下的编译器 --维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已 在 UNIX 系统中,习惯使用 Makefile 作为 makfile 文件如果要使用其他文件作为 makefile,则可利用类似下面的 make 命令选项指定 makefile 文件: $ make -f Makefile.debug 例如,一个名为 prog的程序由三个 C源文件 filea.c、 fileb.c和 filec.c以及库文件 LS编译生成,这三个文件还分别包含自己的头文件 a.h 、 b.h和 c.h通常情况下, C编译器将会输出三个目标文件 filea.o、 fileb.o和 filec.o假设filea.c和 fileb.c都要声明用到一个名为 defs的文件,但 filec.c不用即在 filea.c和 fileb.c里都有这样的声明: #include "defs" 那么下面的文档就描述了这些文件之间的相互联系 : --------------------------------------------------------- #It is a example for describing makefile prog : filea.o fileb.o filec.o cc filea.o fileb.o filec.o -LS -o prog filea.o : filea.c a.h defs cc -c filea.c fileb.o : fileb.c b.h defs cc -c fileb.c filec.o : filec.c c.h cc -c filec.c ---------------------------------------------------------- 这个描述文档就是一个简单的 makefile文件。
从上面的例子注意到,第一个字符为 # 的行为注释行第一个非注释行指定 prog由三个目标文件 filea.o、fileb.o和 filec.o链接生成第三行描述了如何从 prog所依赖的文件建立可执行文件接下来的 4、 6、 8行分别指定三个目标文件,以及它们所依赖的 .c和 .h文件以及 defs文件而 5、 7、 9行则指定了如何从目标所依赖的文件建立目标 百度主题推广新款 紧 身短 裤 超低价低价新款女士服装、童装、内衣就上易趣网上商城 Page 1 of 5Unix中文 - Linux/Unix环境下的 Make和 Makefile详解2007-12-28 当 filea.c或 a.h文件在编译之后又被修改,则 make 工具可自动重新编译 filea.o,如果在前后两次编译之间,filea.C 和 a.h 均没有被修改,而且 test.o还存在的话,就没有必要重新编译这种依赖关系在多源文件的程序编译中尤其重要通过这种依赖关系的定义, make 工具可避免许多不必要的编译工作当然,利用 Shell脚本也可以达到自动编译的效果,但是, Shell 脚本将全部编译任何源文件,包括哪些不必要重新编译的源文件,而 make 工具则可根据目标上一次编译的时间和目标所依赖的源文件的更新时间而自动判断应当编译哪个源文件。
Makefile文件作为一种描述文档一般需要包含以下内容 : ◆ 宏定义 ◆ 源文件之间的相互依赖关系 ◆ 可执行的命令 Makefile中允许使用简单的宏指代源文件及其相关编译信息,在 Linux中也称宏为变量在引用宏时只需在变量前加 $符号,但值得注意的是,如果变量名的长度超过一个字符,在引用时就必须加圆括号() 下面都是有效的宏引用: $(CFLAGS) $2 $Z $(Z) 其中最后两个引用是完全一致的 需要注意的是一些宏的预定义变量,在 Unix系统中, $*、 $@、 $?和 $1zap /usr/bin/make -dp | grep -v TIME>2zap diff 1zap 2zap rm 1zap 2zap lint: dosys.c donamc.c file.c main.c misc.c version.c gram.c $(LINT) dosys.c donamc.c file.c main.c misc.c version.c \ gram.c rm gram.c arch: ar uv /sys/source/s2/make.a $(FILES) ---------------------------------------------------------- 通常在描述文件中应象上面一样定义要求输出将要执行的命令。
在执行了 make命令之后,输出结果为: $ make cc -c version.c cc -c main.c cc -c donamc.c cc -c misc.c cc -c file.c cc -c dosys.c yacc gram.y mv y.tab.c gram.c cc -c gram.c cc version.o main.o donamc.o misc.o file.o dosys.o gram.o \ -LS -o make 13188+3348+3044=19580b=046174b 最后的数字信息是执行 "@size make"命令的输出结果之所以只有输出结果而没有相应的命令行,是因为 "@size make"命令以 "@"起始,这个符号禁止打印输出它所在的命令行 描述文件中的最后几条命令行在维护编译信息方面非常有用其中 "print"命令行的作用是打印输出在执行过上次 "make print"命令后所有改动过的文件名称系统使用一个名为 print的 0字节文件来确定执行 print命令的具体时间,而宏 $?则指向那些在 print文件改动过之后进行修改的文件的文件名。
如果想要指定执行 print命令后,将输出结果送入某个指定的文件,那么就可修改 P的宏定义: make print "P= cat>zap" 在 Linux中大多数软件提供的是源代码,而不是现成的可执行文件,这就要求用户根据自己系统的实际情况和自身的需要来配置、编译源程序后,软件才能使用只有掌握了 make工具,才能让我们真正享受到到 Linux这个自由软件世界的带给我们无穷乐趣 Page 4 of 5Unix中文 - Linux/Unix环境下的 Make和 Makefile详解2007-12-28 了解更多详情,参与讨论,请进入 GBUNIX论坛 : : trotter相关文章• LINUX下架设 CS1.4服务器的完美方法 - 01-19 10:07 pm - 点击 : 544发表评论 查看评论 加入收藏 Email给朋友 打印本文给该文章评分差 12345678910 好nmlkjnmlkjnmlkjnmlkjnmlkjnmlkjnmlkjnmlkjnmlkjnmlkjGO平均得分 0, 共 0 人评分12345678910发表评论标题 :内容 :发 表 预 览 重 置 声明:本站资讯均来自互联网,所有文章版权归原作者和出版者所有,如涉及版权问题,请来信告知!Copyright © 2002-2004 GB. All rights reserved. Page 5 of 5Unix中文 - Linux/Unix环境下的 Make和 Makefile详解2007-12-28。
