how-to-write-makefile/postscript.html

142 lines
12 KiB
HTML
Raw Normal View History

<!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>后序 &mdash; 跟我一起写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> &raquo;</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等等等等来完成诸如“程序打包”、“程序备份”、“制作程序安装包”、“提交代码”、“使用程序模板”、“合并文件”等等五花八门的功能文件操作文件管理编程开发设计或是其它一些异想天开的东西。比如以前在书写银行交易程序时由于银行的交易程序基本一样就见到有人书写了一些交易的通用程序模板在该模板中把一些网络通讯、数据库操作的、业务操作共性的东西写在一个文件中在这些文件中用些诸如“&#64;&#64;&#64;N、###N”奇怪字串标注一些位置然后书写交易时只需按照一种特定的规则书写特定的处理最后在make时使用awk和sed把模板中的“&#64;&#64;&#64;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&#37;&#52;&#48;hotmail">haoel<span>&#64;</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>&#169; 版权所有 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>