📄 14.htm
字号:
<td align="right"><a href="/articlelist.aspx?c=9" >其他开发语言</a> (<a href="http://www.csdn.net/Rss/RssFeed.aspx?rssid=1&bigclassid=9">rss</a>) </td>
</tr>
<tr>
<td align="right"><a href="/articlelist.aspx?c=11" >文件格式</a> (<a href="http://www.csdn.net/Rss/RssFeed.aspx?rssid=1&bigclassid=11">rss</a>) </td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" width="95%" border="0" style="margin-bottom: 4px;" align="center">
<tr>
<td align="right" style="border-bottom: 1px dashed #B0C4DE; color: #0033ff;"><font style="font-size: 8pt;">企业开发</font></td>
</tr>
<tr>
<td align="right"><a href="/articlelist.aspx?c=10" >游戏开发</a> (<a href="http://www.csdn.net/Rss/RssFeed.aspx?rssid=1&bigclassid=10">rss</a>) </td>
</tr>
<tr>
<td align="right"><a href="/articlelist.aspx?c=12" >网站制作技术</a> (<a href="http://www.csdn.net/Rss/RssFeed.aspx?rssid=1&bigclassid=12">rss</a>) </td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" width="95%" border="0" style="margin-bottom: 4px;" align="center">
<tr>
<td align="right" style="border-bottom: 1px dashed #B0C4DE; color: #0033ff;"><font style="font-size: 8pt;">数据库</font></td>
</tr>
<tr>
<td align="right"><a href="/articlelist.aspx?c=8" >数据库开发</a> (<a href="http://www.csdn.net/Rss/RssFeed.aspx?rssid=1&bigclassid=8">rss</a>) </td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" width="95%" border="0" align="center">
<tr>
<td align="right" style="border-bottom: 1px dashed #B0C4DE; color: #0033ff;"><font style="font-size: 8pt;">软件工程</font></td>
</tr>
<tr>
<td align="right"><a href="/articlelist.aspx?c=13" >其他</a> (<a href="http://www.csdn.net/Rss/RssFeed.aspx?rssid=1&bigclassid=13">rss</a>) </td>
</tr>
</table>
</td>
</tr>
</table>
<br>
<table width="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="#000000">
<tr>
<td valign="top" bgcolor="#EDEDED">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td height="27" align="right" background="/images/top.gif"><font class="fonttitle">积极原创作者 </font></td>
</tr>
</table>
<table width="100%" cellpadding="2" cellspacing="1" border="0">
<tr><td align="right"><a href='/user/qiaoshaojie'>qiaoshaojie</a> <font color="#FF0000">(1)</font></td></tr>
<tr><td align="right"><a href='/user/yoqi'>yoqi</a> <font color="#FF0000">(1)</font></td></tr>
<tr><td align="right"><a href='/user/eliry'>eliry</a> <font color="#FF0000">(2)</font></td></tr>
<tr><td align="right"><a href='/user/fasttalk'>fasttalk</a> <font color="#FF0000">(23)</font></td></tr>
<tr><td align="right"><a href='/user/BennyMavis'>BennyMavis</a> <font color="#FF0000">(4)</font></td></tr>
<tr><td align="right"><a href='/user/james999'>james999</a> <font color="#FF0000">(31)</font></td></tr>
<tr><td align="right"><a href='/user/MasterLRC'>MasterLRC</a> <font color="#FF0000">(12)</font></td></tr>
<tr><td align="right"><a href='/user/fatalerror99'>fatalerror99</a> <font color="#FF0000">(1)</font></td></tr>
<tr><td align="right"><a href='/user/ihavenoidea'>ihavenoidea</a> <font color="#FF0000">(1)</font></td></tr>
<tr><td align="right"><a href='/user/ire_wang'>ire_wang</a> <font color="#FF0000">(2)</font></td></tr>
</table>
</td>
</tr>
</table>
</TD>
<TD vAlign="top" width="786">
<table width="100%" border="0" cellpadding="4">
<tr>
<td width="10" height="19"></td>
<td height="19">
<table width="100%" border="0" cellspacing="3" cellpadding="3">
<tr>
<td>
<a href="http://www.csdn.net/">CSDN</a> - <a href="http://dev.csdn.net/">文档中心</a>
- <font color="#003399">
<a id="ArticleTitle1_ArticleTitle1_hlClass" href="/articlelist.aspx?c=13">其他</a></font>
</td>
<TD align="right">
阅读:<span id="ArticleTitle1_ArticleTitle1_lblReadCount">17314</span>
评论:
<span id="ArticleTitle1_ArticleTitle1_lblCommentCount">52</span>
<a href="#Comment">参与评论</a>
</TD>
</tr>
</table>
<table width="100%" border="0" cellspacing="3" cellpadding="3" bgcolor="#eeeeee">
<tr>
<td width="60" height="0" nowrap></td>
<td></td>
</tr>
<tr>
<td height="16" align="center" nowrap bgcolor="#003399"><font color="#ffffff">标题</font></td>
<td><b>
<span id="ArticleTitle1_ArticleTitle1_lblTitle">跟我一起写 Makefile(十四)</span></b>
选择自 <a id="ArticleTitle1_ArticleTitle1_AuthorLink" href="/user/haoel">haoel</a> 的 Blog
</td>
</tr>
<tr>
<td height="16" align="center" bgcolor="#003399"><font color="#ffffff">关键字</font></td>
<td width="500">
<span id="ArticleTitle1_ArticleTitle1_lblKeywords">C C++ make makefile</span></td>
</tr>
<tr>
<td height="16" align="center" bgcolor="#003399"><font color="#ffffff">出处</font></td>
<td>
<span id="ArticleTitle1_ArticleTitle1_lblSource"></span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="10"></td>
<td><span id="ArticleContent1_ArticleContent1_lblContent"><P><FONT face="Courier New" size=4><STRONG>使用make更新函数库文件<BR>———————————</STRONG></FONT></P>
<P><FONT face="Courier New">函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由命令"ar"来完成打包工作。</FONT></P>
<P><FONT face="Courier New"><STRONG>一、函数库文件的成员</STRONG></FONT></P>
<P><FONT face="Courier New">一个函数库文件由多个文件组成。你可以以如下格式指定函数库文件及其组成:</FONT></P>
<P><FONT face="Courier New"> archive(member)</FONT></P>
<P><FONT face="Courier New">这个不是一个命令,而一个目标和依赖的定义。一般来说,这种用法基本上就是为了"ar"命令来服务的。如:</FONT></P>
<P><FONT face="Courier New"> foolib(hack.o) : hack.o<BR> ar cr foolib hack.o</FONT></P>
<P><FONT face="Courier New">如果要指定多个member,那就以空格分开,如:</FONT></P>
<P><FONT face="Courier New"> foolib(hack.o kludge.o)</FONT></P>
<P><FONT face="Courier New">其等价于:</FONT></P>
<P><FONT face="Courier New"> foolib(hack.o) foolib(kludge.o)</FONT></P>
<P><FONT face="Courier New">你还可以使用Shell的文件通配符来定义,如:</FONT></P>
<P><FONT face="Courier New"> foolib(*.o)</FONT></P>
<P><BR><FONT face="Courier New"><STRONG>二、函数库成员的隐含规则</STRONG></FONT></P>
<P><FONT face="Courier New">当make搜索一个目标的隐含规则时,一个特殊的特性是,如果这个目标是"a(m)"形式的,其会把目标变成"(m)"。于是,如果我们的成员是"%.o"的模式定义,并且如果我们使用"make foo.a(bar.o)"的形式调用Makefile时,隐含规则会去找"bar.o"的规则,如果没有定义bar.o的规则,那么内建隐含规则生效,make会去找bar.c文件来生成bar.o,如果找得到的话,make执行的命令大致如下:</FONT></P>
<P><FONT face="Courier New"> cc -c bar.c -o bar.o<BR> ar r foo.a bar.o<BR> rm -f bar.o</FONT></P>
<P><FONT face="Courier New">还有一个变量要注意的是"$%",这是专属函数库文件的自动化变量,有关其说明请参见"自动化变量"一节。</FONT></P>
<P><BR><FONT face="Courier New"><STRONG>三、函数库文件的后缀规则</STRONG></FONT></P>
<P><FONT face="Courier New">你可以使用"后缀规则"和"隐含规则"来生成函数库打包文件,如:</FONT></P>
<P><FONT face="Courier New"> .c.a:<BR> $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o<BR> $(AR) r $@ $*.o<BR> $(RM) $*.o</FONT></P>
<P><FONT face="Courier New">其等效于:</FONT></P>
<P><FONT face="Courier New"> (%.o) : %.c<BR> $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o<BR> $(AR) r $@ $*.o<BR> $(RM) $*.o</FONT></P>
<P><BR><FONT face="Courier New"><STRONG>四、注意事项</STRONG></FONT></P>
<P><FONT face="Courier New">在进行函数库打包文件生成时,请小心使用make的并行机制("-j"参数)。如果多个ar命令在同一时间运行在同一个函数库打包文件上,就很有可以损坏这个函数库文件。所以,在make未来的版本中,应该提供一种机制来避免并行操作发生在函数打包文件上。</FONT></P>
<P><FONT face="Courier New">但就目前而言,你还是应该不要尽量不要使用"-j"参数。</FONT></P>
<P><FONT face="Courier New"></FONT> </P>
<P><FONT face="Courier New" size=4><STRONG>后序<BR>——</STRONG></FONT></P>
<P><FONT face="Courier New">终于到写结束语的时候了,以上基本上就是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)"杀伤力"。</FONT></P>
<P><FONT face="Courier New">对于上述所有的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时有一些更为绝妙的方法,请记得告诉我啊。</FONT></P>
<P><FONT face="Courier New">回头看看整篇文档,不觉记起几年前刚刚开始在Unix下做开发的时候,有人问我会不会写Makefile时,我两眼发直,根本不知道在说什么。一开始看到别人在vi中写完程序后输入"!make"时,还以为是vi的功能,后来才知道有一个Makefile在作怪,于是上网查啊查,那时又不愿意看英文,发现就根本没有中文的文档介绍Makefile,只得看别人写的Makefile,自己瞎碰瞎搞才积累了一点知识,但在很多地方完全是知其然不知所以然。后来开始从事UNIX下产品软件的开发,看到一个400人年,近200万行代码的大工程,发现要编译这样一个庞然大物,如果没有Makefile,那会是多么恐怖的一样事啊。于是横下心来,狠命地读了一堆英文文档,才觉得对其掌握了。但发现目前网上对Makefile介绍的文章还是少得那么的可怜,所以想写这样一篇文章,共享给大家,希望能对各位有所帮助。</FONT></P>
<P><FONT face="Courier New">现在我终于写完了,看了看文件的创建时间,这篇技术文档也写了两个多月了。发现,自己知道是一回事,要写下来,跟别人讲述又是另外一回事,而且,现在越来越没有时间专研技术细节,所以在写作时,发现在阐述一些细节问题时很难做到严谨和精练,而且对先讲什么后讲什么不是很清楚,所以,还是参考了一些国外站点上的资料和题纲,以及一些技术书籍的语言风格,才得以完成。整篇文档的提纲是基于GNU的Makefile技术手册的提纲来书写的,并结合了自己的工作经验,以及自己的学习历程。因为从来没有写过这么长,这么细的文档,所以一定会有很多地方存在表达问题,语言歧义或是错误。因些,我迫切地得等待各位给我指证和建议,以及任何的反馈。</FONT></P><FONT face="Courier New">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">最后,还是利用这个后序,介绍一下自己。我目前从事于所有</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">Unix</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">平台下的软件研发,主要是做分布式计算</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">/</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">网格计算方面的系统产品软件,并且我对于下一代的计算机革命——网格计算非常地感兴趣,对于分布式计算、</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">P2P</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">、</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">Web Service</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">、</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">J2EE</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">技术方向也很感兴趣,同时,对于项目实施、团队管理、项目管理也小有心得,希望同样和我战斗在“<B style="mso-bidi-font-weight: normal">技术和管理并重</B>”的阵线上的年轻一代,能够和我多多地交流。我的</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">MSN</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">是:</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">haoel@hotmail.com</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">(常用),</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">是:</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">753640</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">(不常用)。(注:请勿给我</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">MSN</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">的邮箱发信,由于</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">hotmail</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">的垃圾邮件导致我拒收这个邮箱的所有来信)</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P>
<P></FONT><FONT face="Courier New">我欢迎任何形式的交流,无论是讨论技术还是管理,或是其它海阔天空的东西。除了政治和娱乐新闻我不关心,其它只要积极向上的东西我都欢迎!</FONT></P>
<P><FONT face="Courier New">最最后,我还想介绍一下make程序的设计开发者。</FONT></P>
<P> </P><FONT face="Courier New">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">首当其冲的是:</SPAN><SPAN style="mso-ansi-language: EN"><FONT face="Times New Roman"> <B style="mso-bidi-font-weight: normal"><SPAN lang=EN>Richard Stallman</SPAN></B><SPAN lang=EN><SPAN style="mso-spacerun: yes"> </SPAN><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">开源软件的领袖和先驱,从来没有领过一天工资,从来没有使用过</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><FONT face="Times New Roman">Windows</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">操作系统。对于他的事迹和他的软件以及他的思想,我无需说过多的话,相信大家对这个人并不比我陌生,这是他的主页:</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><A href="http://www.stallman.org/"><U><FONT color=#0000ff>http://www.stallman.org/</FONT></U></A><FONT face="Times New Roman"> </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN">。这里只贴上一张他的近照:</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt" align=center><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN"><IMG height=383 alt="" hspace=0 src="http://www.stallman.org/rms.jpg" width=384 align=baseline border=0><BR></SPAN><SPAN lang=EN style="mso-ansi-language: EN"><o:p><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"> </v:shapetype></SPAN></o:p></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-ansi-language: EN">计算机、音乐、蝴蝶就是他的最爱</SPAN></B></P>
<P class=CourierNew style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN style="mso-ansi-language: EN"><o:p> </o:p></SPAN></P>
<P class=CourierNew style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN style="mso-ansi-language: EN"><o:p> </o:p></SPAN></P>
<P class=CourierNew style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN style="mso-ansi-language: EN"><o:p> </o:p></SPAN></P>
<P class=CourierNew style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-ansi-language: EN">第二位是:</SPAN><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>Roland McGrath</SPAN></B><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"> </SPAN></SPAN></P>
<P class=CourierNew style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">个人主页是:</SPAN><SPAN lang=EN-US><A href="http://www.frob.com/~roland/"><U><FONT color=#800080>http://www.frob.com/~roland/</FONT></U></A> </SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">,下面是他的一些事迹:</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore">1)<SPAN style="FONT: 7pt 'Times New Roman'"> </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">合作编写了并维护</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt">GNU </SPAN><CODE><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.5pt">make</SPAN></CODE><FONT face=宋体><CODE><SPAN style="FONT-SIZE: 12pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 'Courier New'">。</SPAN></CODE><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'"><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore">2)<SPAN style="FONT: 7pt 'Times New Roman'"> </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">和</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'"><A href="http://www.ai.mit.edu/people/thomas/thomas.html"><U><FONT color=#0000ff>Thomas Bushnell</FONT></U></A></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">一同编写了</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">GNU Hurd</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">。</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore">3)<SPAN style="FONT: 7pt 'Times New Roman'"> </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">编写并维护着</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">GNU C library</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">。</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'"> <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore">4)<SPAN style="FONT: 7pt 'Times New Roman'"> </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">合作编写并维护着部分的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 'Courier New'">GNU Emacs</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">。</SPAN><SPAN style="FONT-FAMILY: 'Courier New'"> </SPAN></P>
<P class=CourierNew style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p> </o:p></SPAN></P>
<P class=CourierNew style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">在此,向这两位开源项目的斗士致以最真切的敬意。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P>
<P><BR></FONT><FONT face="Courier New"><STRONG>(全文完)</STRONG></P>
<P align=right><STRONG><FONT face="Courier New"><-</FONT></STRONG><A href="http://www.csdn.net/develop/read_article.asp?id=21081"><FONT face="Courier New" color=#0000ff><STRONG>上一页</STRONG></FONT></A><STRONG><FONT face="Courier New"> </FONT></STRONG></P>
<P><STRONG><FONT face="Courier New">(版权所有,转载时请注明作者和出处)</FONT></STRONG></P></FONT></span>
<br />
<div style="font-size: 14px; line-height: 25px;"><strong>作者Blog:</strong><a id="ArticleContent1_ArticleContent1_AuthorBlogLink" href="http://blog.csdn.net/haoel/" target="_blank">http://blog.csdn.net/haoel/</a></div>
<div style="font-size: 14px; line-height: 25px; color:#900;"><strong>相关文章</strong></div>
<table id="ArticleContent1_ArticleContent1_RelatedArticles" cellspacing="0" border="0">
<tr>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -