how-to-write-makefile/source/postscript.rst
2017-04-14 01:01:07 +08:00

78 lines
6.4 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

后序
====
终于到写结束语的时候了以上基本上就是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“杀伤力”。
对于上述所有的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时有一些更为绝妙的方法请记得告诉我啊。
回头看看整篇文档不觉记起几年前刚刚开始在Unix下做开发的时候有人问我会不会写Makefile时
两眼发直根本不知道在说什么。一开始看到别人在vi中写完程序后输入“!make”时还以为是vi的功能
后来才知道有一个Makefile在作怪于是上网查啊查那时又不愿意看英文发现就根本没有中文的文档介
绍Makefile只得看别人写的Makefile自己瞎碰瞎搞才积累了一点知识但在很多地方完全是知其然不
知所以然。后来开始从事UNIX下产品软件的开发看到一个400人近200万行代码的大工程发现要编译
这样一个庞然大物如果没有Makefile那会是多么恐怖的一样事啊。于是横下心来狠命地读了一堆英文
文档才觉得对其掌握了。但发现目前网上对Makefile介绍的文章还是少得那么的可怜所以想写这样一篇
文章,共享给大家,希望能对各位有所帮助。
现在我终于写完了,看了看文件的创建时间,这篇技术文档也写了两个多月了。发现,自己知道是一回事,
要写下来,跟别人讲述又是另外一回事,而且,现在越来越没有时间钻研技术细节,所以在写作时,发现在
阐述一些细节问题时很难做到严谨和精炼,而且对先讲什么后讲什么不是很清楚,所以,还是参考了一些国
外站点上的资料和提纲以及一些技术书籍的语言风格才得以完成。整篇文档的提纲是基于GNU
的Makefile技术手册的提纲来书写的并结合了自己的工作经验以及自己的学习历程。因为从来没有写过
这么长,这么细的文档,所以一定会有很多地方存在表达问题,语言歧义或是错误。因些,我迫切地等待各
位给我指正和建议,以及任何的反馈。
最后还是利用这个后序介绍一下自己。我目前从事于所有Unix平台下的软件研发主要是做分布式计
算/网格计算方面的系统产品软件,并且我对于下一代的计算机革命——网格计算非常地感兴趣,对于分布式计
算、P2P、Web Service、J2EE技术方向也很感兴趣同时对于项目实施、团队管理、项目管理也小有心
希望同样和我战斗在“技术和管理并重”的阵线上的年轻一代能够和我多多地交流。我的MSN是
haoel@hotmail.com常用QQ是753640不常用请勿给我MSN的邮箱发信
于hotmail的垃圾邮件导致我拒收这个邮箱的所有来信
我欢迎任何形式的交流,无论是讨论技术还是管理,或是其它海阔天空的东西。除了政治和娱乐新闻我不关
心,其它只要积极向上的东西我都欢迎!
最最后我还想介绍一下make程序的设计开发者。
首当其冲的是Richard Stallman
开源软件的领袖和先驱从来没有领过一天工资从来没有使用过Windows操作系统。对于他的事迹和他的
软件以及他的思想,我无需说过多的话,相信大家对这个人并不比我陌生,这是他的主页
http://www.stallman.org/ 。这里只贴上一张他的近照:
http://bbs.chinaunix.net/attachments/rms.jpg
第二位是Roland McGrath
个人主页是http://www.frob.com/~roland/ ,下面是他的一些事迹:
#. 合作编写了并维护GNU make。
#. 和Thomas Bushnell一同编写了GNU Hurd。
#. 编写并维护着GNU C library。
#. 合作编写并维护着部分的GNU Emacs。
在此,向这两位开源项目的斗士致以最真切的敬意。
(全文完)