⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 使用autotools进行项目管理 - mark zhong's blog.htm

📁 有关Makefile生成的全攻略
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0056)http://blog.csdn.net/zgzjw/archive/2004/06/26/27052.aspx -->
<HTML><HEAD><TITLE>mark zhong's blog</TITLE>
<META content="MSHTML 6.00.2900.2668" name=GENERATOR>
<META http-equiv=Content-Type content="text/html; charset=utf-8"><LINK media=all 
href="使用autotools进行项目管理 - mark zhong's blog.files/style.css" type=text/css 
rel=stylesheet><LINK media=print 
href="使用autotools进行项目管理 - mark zhong's blog.files/print.css" type=text/css 
rel=stylesheet><LINK title=RSS href="http://blog.csdn.net/zgzjw/rss.aspx" 
type=application/rss+xml rel=alternate></HEAD>
<BODY>
<FORM language=javascript id=Form1 name=Form1 
onsubmit="if (!ValidatorOnSubmit()) return false;" action=27052.aspx 
method=post><INPUT type=hidden name=__VIEWSTATE>
<SCRIPT language=javascript 
src="使用autotools进行项目管理 - mark zhong's blog.files/WebUIValidation.js" 
type=text/javascript></SCRIPT>
 
<DIV class=pagelayout>
<DIV class=header>
<DIV><A class=headermaintitle id=Header1_HeaderTitle 
href="http://blog.csdn.net/zgzjw/">mark zhong's blog</A> </DIV>
<DIV></DIV></DIV>
<DIV class=leftcolumn>
<H1 class=listtitle>导航</H1>
<UL class=list>
  <LI class=listitem><A id=MyLinks1_HomeLink title=到聚合站点 
  href="http://blog.csdn.net/">CSDNBlog</A> 
  <LI class=listitem><A id=MyLinks1_PersonalHome title="访问 mark zhong's blog" 
  href="http://blog.csdn.net/zgzjw/">我的首页</A> 
  <LI class=listitem><A id=MyLinks1_ContactLink accessKey=9 
  href="http://blog.csdn.net/zgzjw/contact.aspx">联系作者</A> 
  <LI class=listitem><A id=MyLinks1_Syndication 
  href="http://blog.csdn.net/zgzjw/Rss.aspx">聚合</A><A id=MyLinks1_XMLLink 
  href="http://blog.csdn.net/zgzjw/Rss.aspx"><IMG alt="" 
  src="使用autotools进行项目管理 - mark zhong's blog.files/xml.gif" border=0></A> 
  <LI class=listitem><A id=MyLinks1_Admin 
  href="http://blog.csdn.net/zgzjw/login.aspx">登录</A> </LI></UL>
<DIV class=listtitle>Blog统计</DIV>
<UL class=list>
  <LI class=listitem>文章 - 7 
  <LI class=listitem>收藏 - 0 
  <LI class=listitem>评论 - 11 
  <LI class=listitem>Trackbacks - 0 </LI></UL>
<H3 class=listtitle>文章</H3>
<UL class=list>
  <LI class=listitem><A 
  href="http://blog.csdn.net/zgzjw/category/91190.aspx">linux</A><A 
  href="http://blog.csdn.net/zgzjw/category/91190.aspx/rss">(RSS)</A></LI></UL>
<H3 class=listtitle>收藏</H3>
<UL class=list></UL>
<H3 class=listtitle>相册</H3><!--category title-->
<UL class=list>
  <LI class=listitem><A 
  href="http://blog.csdn.net/zgzjw/Gallery/17469.aspx">文章</A></LI></UL>
<H3 class=listtitle>存档</H3>
<UL class=list>
  <LI><A href="http://blog.csdn.net/zgzjw/archive/2005/01.aspx">2005年01月(1)</A>
  <LI><A href="http://blog.csdn.net/zgzjw/archive/2004/12.aspx">2004年12月(1)</A>
  <LI><A href="http://blog.csdn.net/zgzjw/archive/2004/11.aspx">2004年11月(3)</A>
  <LI><A href="http://blog.csdn.net/zgzjw/archive/2004/09.aspx">2004年09月(1)</A>
  <LI><A 
  href="http://blog.csdn.net/zgzjw/archive/2004/06.aspx">2004年06月(1)</A></LI></UL>
<DIV class=spacer>&nbsp;</DIV></DIV>
<DIV class=centercolumn>
<SCRIPT>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</SCRIPT>

<DIV class=post>
<DIV class=postTitle><A 
href="http://blog.csdn.net/zgzjw/archive/2004/06/26/27052.aspx">使用autotools进行项目管理</A>
<SCRIPT 
language=javascript>document.title="使用autotools进行项目管理 - "+document.title</SCRIPT>
 </DIV>
<DIV class=postText>
<TABLE cellSpacing=0 cellPadding=0 width=800 align=center border=0>
  <TBODY>
  <TR></TR>
  <TR>
    <TD colSpan=3>
      <P align=left><FONT face="Verdana, Arial, Helvetica, sans-serif"><FONT 
      size=5>Mark Zhong's HomgPage</FONT><FONT size=2> </FONT></FONT></P>
      <P align=left>?</P></TD></TR>
  <TR>
    <TD vAlign=top width=178>
      <P class=teaser><A class=style2 
      href="http://www.free-think.org/mark/index.html">主页</A></P>
      <P class=style2>
      <P><SPAN class=teaser><SPAN class=style2>其它语言:</SPAN><BR></SPAN><A 
      href="http://www.free-think.org/mark/index.html">英语</A><SPAN 
      class=teaser><BR></SPAN></P>
      <P class=teaser><SPAN class=style2>文章</SPAN>:<BR><A class=style2 
      href="http://www.free-think.org/mark/article/0001/article/0001.html">autotools的使用</A><BR><A 
      class=style2 
      href="http://www.free-think.org/mark/article/0001/article/index.html">...更多</A></P>
      <P class=style2>
      <P class=teaser><SPAN class=style2>书籍资源:</SPAN> <BR><A class=style2 
      href="http://www.free-think.org/mark/article/0001/book/autotools/index.html">AutoTools</A><BR><A 
      class=style2 
      href="http://www.free-think.org/mark/article/0001/book/index.html">...更多</A></P>
      <P class=style2>
      <P class=teaser><SPAN class=style2><A 
      href="mailto:mark@free-think.org">给我发EMAIL</A></SPAN></P>
      <P>
      <P class=teaser><SPAN><BR><BR></SPAN></P>
      <P>?</P></TD>
    <TD vAlign=top width=12>?</TD>
    <TD vAlign=top width=450>
      <TABLE class=slugTable cellSpacing=0 cellPadding=0 width="100%" 
        border=0><TBODY>
        <TR>
          <TD class=slugText>      使用autotools配置管理跨平台项目</TD>
          <TD align=right>?</TD></TR></TBODY></TABLE><BR>
      <P>一、简介 </P>
      <P> 1.程序的跨平台<BR>???? 开发能够运行在多种不同平台上的软件是一项需要很多技巧和努力的工作。必须有多种平台的相关知识。   </P>
      <P>  仅仅创建能够在多种不同的*NIX系统上运行的程序也要做大量的工作。首先,代码本身必须是可移植的,可移植代码很少对运行时的硬件以及可以使用的软件库等有所假设。 
      </P>
      <P>  开发者必须对不同系统的编译和运行环境,甚至是硬件系统结构有足够多的了解。<A 
      href="http://www.gnu.org/">GNU/Linux</A>中普遍使用的GNU软件,虽然也存在于许多其他的操作系统和硬件平台,但是这不是操作系统必须的。此外也可能存在以下情况:</P>
      <UL>
        <LI>编译器可能不遵循ISO标准 
        <LI>函数库可能缺少关键的特性 
        <LI>操作系统的API可能有所不同 
        <LI>文件系统所做的约定有所不同      </LI></UL>
      <P>  因此,在LINUX下的开发人员不得不编写一个通用的makefile,并且告诉用户如何编辑这个makefile文件以适应本机环境。 
          </P>
      <P>  一般开源项目和GNU的项目的源代码都是通过configure命令生成Makefile来进行编译的。如果你想使你的 
      项目表现的更专业一点,想省去写Makefile的麻烦,如果你想管理好有一堆源代码的项目。那么这篇文章非常 适合你。 </P>
      <P> 2.autotools的构成和历史<BR>  
       其实GNU/Autotools是由一组命令行工具构成,它们包括:Autoconf,Automake,Libtool等。它们最早只是 
      一组UNIX下的shell script。更详细的信息,可以访问<A 
      href="http://www.gnu.org/manual/manual.html">GNU Manual</A>。 </P>
      <P> 3.它们是怎样工作的<BR>   下图是整个autotools的工作流程及架构图:<BR><IMG height=492 src="" 
      width=558></P>
      <P>图中文字颜色为绿色的文件是Linux下的可执行文件。<BR>  
       以下详细的为大家介绍一下该流程。Makefile是最终文档,在发布源代码包时并不存在,一般是由使用者在自己的平台上生成。要完成该工作,首先要准备好configure.in,Makefile.am, 
      aclocal.m4,如有需要可准备好config.h.in。configure.in可以手动创建,也可以由autoscan命令生成的模板文件configure.scan重命名得到,autoscan只需在源代码树根目录下运行一次既可。aclocal.m4由aclocal程序生成。当准备好configure.in和aclocal.m4时既可运行autoconf以生成configure可执行文件。准备好Makefile.am文件后,既可运行automake生成Makefile.in文件,最后在编译以前运行一次configure,检查系统并生成Makefile。然后就是make,make 
      install了:),下面我们将以一个C++源程序为例做为这个流程的一个实践。</P>
      <P>二、实战与分析</P>
      <P>1.实战<BR>hello.cpp</P>
      <TABLE width=470 bgColor=#999999>
        <TBODY>
        <TR>
          <TD height=130>
            <P>#include <IOSTREAM><BR>#include "config.h"<BR>using namespace 
            std;<BR><BR><BR>int main(void)<BR>{<BR>  cout &lt;&lt; "hello,world" 
            &lt;&lt; 
      endl;<BR>}</P></TD></TR></TBODY></TABLE><BR>运行autoscan,目录下将生成configure.scan:<BR>
      <TABLE width="75%" border=0>
        <TBODY>
        <TR>
          <TD borderColor=#0 bgColor=#999999>dnl Process this file with 
            autoconf to produce a configure script. 
            <P>AC_INIT(hello.cpp)<BR>AM_INIT_AUTOMAKE(hello, 1.0)</P>
            <P>dnl Checks for programs.<BR>AC_PROG_CXX</P>
            <P>dnl Checks for libraries.</P>
            <P>dnl Checks for header files.</P>
            <P>dnl Checks for typedefs, structures, and compiler 
            characteristics.</P>
            <P>dnl Checks for library function</P>
            <P>AC_OUTPUT(Makefile)</P></TD></TR></TBODY></TABLE><BR>其中AM_INIT_AUTOMAKE宏和最后一行的Makefile是手工增加的。 
      修改完成后把configure.scan重命名为configure.in。<BR><BR>运行aclocal当前目录下会生成aclocal.m4文件。aclocal必须在configure.in文件存在时运行。<BR><BR>运行autoheader当前目录下会生成config.h.in:<BR>
      <TABLE borderColor=#ffffff width="75%" bgColor=#999999 border=0>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -