网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > linux > 新手入门 > 常用命令 > 深入学习Make命令和Makefile(上)  

深入学习Make命令和Makefile(上)

2008-06-06  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

make是Linux下的一款程序自动维护工具,配合makefile的使用,就能够根据程序中模块的修改情况,自动判断应该对那些模块重新编译,从而保证软件是由最新的模块构成。本文分为上下两部分,我们将紧紧围绕make在软件开发中的应用展开详细的介绍。

一、都是源文件太多惹得祸

网管u家u.bitsCN.com

当我们在开发的程序中涉及众多源文件时,常常会引起一些问题。首先,如果程序只有两三个源文件,那么修改代码后直接重新编译全部源文件就行了,但是如果程序的源文件较多,这种简单的处理方式就有问题了。 网管网www.bitscn.com

设想一下,如果我们只修改了一个源文件,却要重新编译所有源文件,那么这显然是在浪费时间。其次,要是只重新编译那些受影响的文件的话,我们又该如何确定这些文件呢?比如我们使用了多个头文件,那么它们会被包含在各个源文件中,修改了某些头文件后,那些源文件受影响,哪些与此无关呢?如果采取拉网式大检查的话,可就费劲了。

中国网管联盟bitsCN.com

由此可以看出,源文件多了可真是件让人头疼的事。幸运的是,实用程序make可以帮我们解决这两个问题——当程序的源文件改变后,它能保证所有受影响的文件都将重新编译,而不受影响的文件则不予编译,这真是太好了。

网管下载dl.bitscn.com

二、Make程序的命令行选项和参数

网管u家u.bitsCN.com

我们知道,make程序能够根据程序中各模块的修改情况,自动判断应对哪些模块重新编译,保证软件是由最新的模块构建的。至于检查哪些模块,以及如何构建软件由makefile文件来决定。 网管联盟bitsCN@com

虽然make可以在makefile中进行配置,除此之外我们还可以利用make程序的命令行选项对它进行即时配置。Make命令参数的典型序列如下所示:

网管网www_bitscn_com

make [-f makefile文件名][选项][宏定义][目标]

网管bitscn_com

这里用[]括起来的表示是可选的。命令行选项由破折号“–”指明,后面跟选项,如

网管bitscn_com

make –e
中国网管论坛bbs.bitsCN.com

如果需要多个选项,可以只使用一个破折号,如

网管论坛bbs_bitsCN_com

make –kr
网管u家u.bitsCN.com

也可以每个选项使用一个破折号,如 网管下载dl.bitscn.com

make –k –r
网管u家u.bitscn@com

甚至混合使用也行,如

网管u家u.bitsCN.com

make –e –kr
网管u家u.bitscn@com

Make命令本身的命令行选项较多,这里只介绍在开发程序时最为常用的三个,它们是:

网管u家u.bitscn@com

–k:
如果使用该选项,即使make程序遇到错误也会继续向下运行;如果没有该选项,在遇到第一个错误时make程序马上就会停止,那么后面的错误情况就不得而知了。我们可以利用这个选项来查出所有有编译问题的源文件。

网管论坛bbs_bitsCN_com

–n:
该选项使make程序进入非执行模式,也就是说将原来应该执行的命令输出,而不是执行。

网管下载dl.bitscn.com

–f
指定作为makefile的文件的名称。 如果不用该选项,那么make程序首先在当前目录查找名为makefile的文件,如果没有找到,它就会转而查找名为Makefile的文件。如果您在Linux下使用GNU Make的话,它会首先查找GNUmakefile,之后再搜索makefile和Makefile。按照惯例,许多Linux程序员使用Makefile,因为这样能使Makefile出现在目录中所有以小写字母命名的文件的前面。所以,最好不要使用GNUmakefile这一名称,因为它只适用于make程序的GNU版本。 中国网管联盟bitsCN.com

当我们想构建指定目标的时候,比如要生成某个可执行文件,那么就可以在make命令行中给出该目标的名称;如果命令行中没有给出目标的话,make命令会设法构建makefile中的第一个目标。我们可以利用这一特点,将all作为makefile中的第一个目标,然后将让目标作为all所依赖的目标,这样,当命令行中没有给出目标时,也能确保它会被构建。

网管网www.bitscn.com

网管u家u.bitscn@com


TAGs
 上一篇:linux多进程的总结(fork用法)   下一篇:深入学习Make命令和Makefile(下)
深入学习Make命令和Makefile(上) 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: