简单实例学习autotools工具

来源:互联网 发布:python 多核并行计算 编辑:程序博客网 时间:2024/06/05 19:32
=摘要=
今天实在是无想做有关于比赛的或者学校部门的东西了...因为这个星期天天都是早出晚归的...而且好几天中大部分时间是在车上面渡过的...于是找点其他事做...下面这个就是刚刚搞了一会的事儿--关于如何自动生成makefile...
在这里做一下记录..
autotools是一系列自动化工具...目的在 r动生成makefile,configure等文件...让系统的构建脚本(针对make),源码打包,安装能够通过几个命令自动生成.
本文通过一个简单的例子来说明autotools的简单用法.这里多多少少参考了网上的资料,但是网上的资料在我的机器上进行时有一点点不正常..于是经过自己的一小翻摸索后,终于搞成功了...


CHANGE LOG: (1)Makefile.am 不是Makefile.in 。Makefile.am是手工指定需要编译的源文件,生成的目标程序,当然还有automake的选项的automake输入文件。


=实例=
本实例在~/hello目录进行.目录初始只有一个文件:hello.cpp,是一个简单的c++源程序...目录结构使用tree生成如下:
{{{
$tree ~/hellohello/└── hello.cpp
}}}

实例的目的在于使用autotools工具自动生成该hello项目的makfile文件,configure文件.使得下面命令能够成功执行.
{{{
make#默认编译整个系统make install#默认安装整个系统到...make clean#清理编译过程产生的临时文件.make dist   #源代码打包
}}}
=实现步骤=
==安装==
{{{
$sudo apt-get install autoconf
//有4m左右吧.
}}}
==主要命令==
autoscan    #产生configure.sacn==>.inaclocal  #需要要configure.inautoconfautoheaderautomake     #需要有Makefile.amautomake --add-missing#同上

==系统的编译==
$./configure#生成makfile文件$make$make install$make clean
==开始==
使用autotools工具还是需要知道这系列工具是怎么用的...
1: $autoscan2: 这个命令将生成configure.scan文件,将这个文件改成configure.in.3: 修改configure.in文件.4: 添加如下到configure.in中. {{{AC_CONFIG_FILES([Makfile])AM_INIT_AUTOMAKE(hello,1.0)  }}}5: $aclocal6: $autoconf#生成configure可执行文件7: $autoheader8: 创建Makefile.am文件.9: 向Makefile.am文件加入如下信息:   {{{AUTOMAKE_OPTIONS= foreign#bin_PROGRAMS= hello#指明最终生成的可执行文件hello_SOURCES= hello.cpp#指明该最终的可执行文件由哪些源文件组成.   }}}10:$automake 或者 $automake --add-missing#生成Makefile.in文件.到了这里就完成auto工具的使用啦.下面可以需要生成该系统的makfile文件就可以:11:$./configure  (如果检查成功的话就会生成makfile啦)12:make#编译13:make clean#清理临时编译文件.14:make dist#对当前源代码打包(打包后的文件是有版本号的.这个版本号在configure.in中确定).15:make install#安装当前系统的程序到默认目录(/usr/local/bin).[可以需要使用root权限来安装]


=小结=
autotools是一个自动生成makefile的文件...多么适合源代码的构建脚本生成,打包,命令行安装呀..哈哈:)

=参考资料=
http://meimoon.blog.sohu.com/140800634.html(autotools相关命令的说明)
http://hi.baidu.com/inter_recoba20/blog/item/424a6c3aa490ab2d96ddd846.html(有autotools的使用流程图)
http://blog.csdn.net/still_unknown/article/details/4140408(这里有有关于configure.in文件的改写).