142 lines
12 KiB
HTML
142 lines
12 KiB
HTML
|
<!DOCTYPE html>
|
|||
|
<html class="writer-html5" lang="zh-CN" >
|
|||
|
<head>
|
|||
|
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
|||
|
|
|||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|||
|
<title>后序 — 跟我一起写Makefile 1.0 文档</title>
|
|||
|
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|||
|
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
|||
|
<!--[if lt IE 9]>
|
|||
|
<script src="_static/js/html5shiv.min.js"></script>
|
|||
|
<![endif]-->
|
|||
|
|
|||
|
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
|||
|
<script src="_static/jquery.js"></script>
|
|||
|
<script src="_static/underscore.js"></script>
|
|||
|
<script src="_static/doctools.js"></script>
|
|||
|
<script src="_static/translations.js"></script>
|
|||
|
<script src="_static/js/theme.js"></script>
|
|||
|
<link rel="index" title="索引" href="genindex.html" />
|
|||
|
<link rel="search" title="搜索" href="search.html" />
|
|||
|
<link rel="prev" title="使用make更新函数库文件" href="archives.html" />
|
|||
|
</head>
|
|||
|
|
|||
|
<body class="wy-body-for-nav">
|
|||
|
<div class="wy-grid-for-nav">
|
|||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|||
|
<div class="wy-side-scroll">
|
|||
|
<div class="wy-side-nav-search" >
|
|||
|
<a href="index.html" class="icon icon-home"> 跟我一起写Makefile
|
|||
|
</a>
|
|||
|
<div class="version">
|
|||
|
1.0
|
|||
|
</div>
|
|||
|
<div role="search">
|
|||
|
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
|||
|
<input type="text" name="q" placeholder="Search docs" />
|
|||
|
<input type="hidden" name="check_keywords" value="yes" />
|
|||
|
<input type="hidden" name="area" value="default" />
|
|||
|
</form>
|
|||
|
</div>
|
|||
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|||
|
<p class="caption" role="heading"><span class="caption-text">目录</span></p>
|
|||
|
<ul class="current">
|
|||
|
<li class="toctree-l1"><a class="reference internal" href="overview.html">概述</a></li>
|
|||
|
<li class="toctree-l1"><a class="reference internal" href="introduction.html">makefile介绍</a></li>
|
|||
|
<li class="toctree-l1"><a class="reference internal" href="rules.html">书写规则</a></li>
|
|||
|
<li class="toctree-l1"><a class="reference internal" href="recipes.html">书写命令</a></li>
|
|||
|
<li class="toctree-l1"><a class="reference internal" href="variables.html">使用变量</a></li>
|
|||
|
<li class="toctree-l1"><a class="reference internal" href="conditionals.html">使用条件判断</a></li>
|
|||
|
<li class="toctree-l1"><a class="reference internal" href="functions.html">使用函数</a></li>
|
|||
|
<li class="toctree-l1"><a class="reference internal" href="invoke.html">make 的运行</a></li>
|
|||
|
<li class="toctree-l1"><a class="reference internal" href="implicit_rules.html">隐含规则</a></li>
|
|||
|
<li class="toctree-l1"><a class="reference internal" href="archives.html">使用make更新函数库文件</a></li>
|
|||
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">后序</a></li>
|
|||
|
</ul>
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</nav>
|
|||
|
|
|||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
|||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|||
|
<a href="index.html">跟我一起写Makefile</a>
|
|||
|
</nav>
|
|||
|
|
|||
|
<div class="wy-nav-content">
|
|||
|
<div class="rst-content">
|
|||
|
<div role="navigation" aria-label="Page navigation">
|
|||
|
<ul class="wy-breadcrumbs">
|
|||
|
<li><a href="index.html" class="icon icon-home"></a> »</li>
|
|||
|
<li>后序</li>
|
|||
|
<li class="wy-breadcrumbs-aside">
|
|||
|
<a href="_sources/postscript.rst.txt" rel="nofollow"> View page source</a>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
<hr/>
|
|||
|
</div>
|
|||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|||
|
<div itemprop="articleBody">
|
|||
|
|
|||
|
<section id="id1">
|
|||
|
<h1>后序<a class="headerlink" href="#id1" title="永久链接至标题">¶</a></h1>
|
|||
|
<p>终于到写结束语的时候了,以上基本上就是GNU make的Makefile的所有细节了。其它的厂商的make基本上也就是这样的,无论什么样的make,都是以文件的依赖性为基础的,其基本是都是遵循一个标准的。这篇文档中80%的技术细节都适用于任何的make,我猜测“函数”那一章的内容可能不是其它make所支持的,而隐含规则方面,我想不同的make会有不同的实现,我没有精力来查看GNU的make和VC的nmake、BCB的 make
|
|||
|
,或是别的UNIX下的make有些什么样的差别,一是时间精力不够,二是因为我基本上都是在Unix下使用make,以前在SCO Unix和 IBM的AIX,现在在Linux、Solaris、HP-UX、AIX和Alpha下使用,Linux和Solaris下更多一点。不过,我可以肯定的是,在Unix下的make,无论是哪种平台,几乎都使用了Richard Stallman开发的make和cc/gcc的编译器,而且,基本上都是 GNU的make(公司里所有的UNIX机器上都被装上了GNU的东西,所以,使用GNU的程序也就多了一些)。GNU的东西还是很不错的,特别是使用得深了以后,越来越觉得GNU的软件的强大,也越来越觉得GNU的在操作系统中(主要是Unix,甚至Windows)“杀伤力”。</p>
|
|||
|
<p>对于上述所有的make的细节,我们不但可以利用make这个工具来编译我们的程序,还可以利用make来完成其它的工作,因为规则中的命令可以是任何Shell之下的命令,所以,在Unix下,你不一定只是使用程序语言的编译器,你还可以在Makefile中书写其它的命令,如:tar、 awk、mail、sed、cvs、compress
|
|||
|
、ls、rm、yacc、rpm、ftp等等,等等,来完成诸如“程序打包”、“程序备份”、“制作程序安装包”、“提交代码”、“使用程序模板”、“合并文件”等等五花八门的功能,文件操作,文件管理,编程开发设计,或是其它一些异想天开的东西。比如,以前在书写银行交易程序时,由于银行的交易程序基本一样,就见到有人书写了一些交易的通用程序模板,在该模板中把一些网络通讯、数据库操作的、业务操作共性的东西写在一个文件中,在这些文件中用些诸如“@@@N、###N”奇怪字串标注一些位置,然后书写交易时,只需按照一种特定的规则书写特定的处理,最后在make时,使用awk和sed,把模板中的“@@@N、###N”等字串替代成特定的程序,形成C文件,然后再编译。这个动作很像数据库的“扩展C”语言(即在C语言中用“EXEC SQL”的样子执行SQL语句,在用cc/gcc编译之前,需要使用“扩展C”的翻译程序,如cpre,把其翻译成标准C)。如果你在使用make时有一些更为绝妙的方法,请记得告诉我啊。</p>
|
|||
|
<p>回头看看整篇文档,不觉记起几年前刚刚开始在Unix下做开发的时候,有人问我会不会写Makefile时,我两眼发直,根本不知道在说什么。一开始看到别人在vi中写完程序后输入“!make”时,还以为是vi的功能,后来才知道有一个Makefile在作怪,于是上网查啊查,那时又不愿意看英文,发现就根本没有中文的文档介绍Makefile,只得看别人写的Makefile,自己瞎碰瞎搞才积累了一点知识,但在很多地方完全是知其然不知所以然。后来开始从事UNIX下产品软件的开发,看到一个400人,近200万行代码的大工程,发现要编译这样一个庞然大物,如果没有Makefile,那会是多么恐怖的一样事啊。于是横下心来,狠命地读了一堆英文文档,才觉得对其掌握了。但发现目前网上对Makefile介绍的文章还是少得那么的可怜,所以想写这样一篇文章,共享给大家,希望能对各位有所帮助。</p>
|
|||
|
<p>现在我终于写完了,看了看文件的创建时间,这篇技术文档也写了两个多月了。发现,自己知道是一回事,要写下来,跟别人讲述又是另外一回事,而且,现在越来越没有时间钻研技术细节,所以在写作时,发现在阐述一些细节问题时很难做到严谨和精炼,而且对先讲什么后讲什么不是很清楚,所以,还是参考了一些国外站点上的资料和提纲,以及一些技术书籍的语言风格,才得以完成。整篇文档的提纲是基于GNU
|
|||
|
的Makefile技术手册的提纲来书写的,并结合了自己的工作经验,以及自己的学习历程。因为从来没有写过这么长,这么细的文档,所以一定会有很多地方存在表达问题,语言歧义或是错误。因些,我迫切地等待各位给我指正和建议,以及任何的反馈。</p>
|
|||
|
<p>最后,还是利用这个后序,介绍一下自己。我目前从事于所有Unix平台下的软件研发,主要是做分布式计算/网格计算方面的系统产品软件,并且我对于下一代的计算机革命——网格计算非常地感兴趣,对于分布式计算、P2P、Web Service、J2EE技术方向也很感兴趣,同时,对于项目实施、团队管理、项目管理也小有心得,希望同样和我战斗在“技术和管理并重”的阵线上的年轻一代,能够和我多多地交流。我的MSN是:
|
|||
|
<a class="reference external" href="mailto:haoel%40hotmail">haoel<span>@</span>hotmail</a>.com(常用),QQ是:753640(不常用)。(注:请勿给我MSN的邮箱发信,由于hotmail的垃圾邮件导致我拒收这个邮箱的所有来信)</p>
|
|||
|
<p>我欢迎任何形式的交流,无论是讨论技术还是管理,或是其它海阔天空的东西。除了政治和娱乐新闻我不关心,其它只要积极向上的东西我都欢迎!</p>
|
|||
|
<p>最最后,我还想介绍一下make程序的设计开发者。</p>
|
|||
|
<p>首当其冲的是:Richard Stallman</p>
|
|||
|
<p>开源软件的领袖和先驱,从来没有领过一天工资,从来没有使用过Windows操作系统。对于他的事迹和他的软件以及他的思想,我无需说过多的话,相信大家对这个人并不比我陌生,这是他的主页:<a class="reference external" href="http://www.stallman.org/">http://www.stallman.org/</a> 。这里只贴上一张他的近照:</p>
|
|||
|
<p><a class="reference external" href="http://bbs.chinaunix.net/attachments/rms.jpg">http://bbs.chinaunix.net/attachments/rms.jpg</a></p>
|
|||
|
<p>第二位是:Roland McGrath</p>
|
|||
|
<p>个人主页是:<a class="reference external" href="http://www.frob.com/~roland/">http://www.frob.com/~roland/</a> ,下面是他的一些事迹:</p>
|
|||
|
<ol class="arabic simple">
|
|||
|
<li><p>合作编写了并维护GNU make。</p></li>
|
|||
|
<li><p>和Thomas Bushnell一同编写了GNU Hurd。</p></li>
|
|||
|
<li><p>编写并维护着GNU C library。</p></li>
|
|||
|
<li><p>合作编写并维护着部分的GNU Emacs。</p></li>
|
|||
|
</ol>
|
|||
|
<p>在此,向这两位开源项目的斗士致以最真切的敬意。</p>
|
|||
|
<p>(全文完)</p>
|
|||
|
</section>
|
|||
|
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
|||
|
<a href="archives.html" class="btn btn-neutral float-left" title="使用make更新函数库文件" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
|||
|
</div>
|
|||
|
|
|||
|
<hr/>
|
|||
|
|
|||
|
<div role="contentinfo">
|
|||
|
<p>© 版权所有 2014-2019, 作者:陈皓;排版:SeisMan.
|
|||
|
<span class="lastupdated">最后更新于 2022年5月22日.
|
|||
|
</span></p>
|
|||
|
</div>
|
|||
|
|
|||
|
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|||
|
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|||
|
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|||
|
|
|||
|
|
|||
|
</footer>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</section>
|
|||
|
</div>
|
|||
|
<script>
|
|||
|
jQuery(function () {
|
|||
|
SphinxRtdTheme.Navigation.enable(true);
|
|||
|
});
|
|||
|
</script>
|
|||
|
|
|||
|
</body>
|
|||
|
</html>
|