automake使用流程总结

automake与cmake 都是产生makefile文件的工具。cmake产生的晚,解决了很多autotools工具的问题。

autotools是一个工具集,具有强大的灵活性,但是因为步骤太多,配置繁琐,产生了很多的替代方案,cmake是其中最优秀的之一。当然很多其他替代品不会产生makefile文件而直接具有make的功能了。

cmake相比autotool确实好用,包括KDE在内的很多大型项目也都在使用cmake。不过autotools的使用率仍旧比cmake要高。

Makefile的基本结构不是很复杂,但当一个程序开发人员开始写Makefile时,经常会怀疑自己写的是否符合惯例,而且自己写的Makefile经常和自己的开发环境相关联,当系统环境变量或路径发生了变化后,Makefile可能还要跟着修改.这样就造成了手工书写Makefile的诸多问题,automake恰好能很好地帮助我们解决这些问题.

automake使用流程总结_第1张图片

automake生成Makefile的步骤:

(1)创建源代码文件,使用”autoscan”生成configure.scan文件,将其重命名为configure.ac(或configure.in),并做适当修改
(2)用”aclocal”命令生成aclocal.m4文件
(3)用”autoconf”命令由configure.ac和aclocal.m4文件生成configure文件。
(4)手工编辑或由系统给定acconfig.h文件,使用”autoheader”命令生成config.h.in文件,使程序可移植
(5)手工编辑Makefile.am文件,使用”automake --add-missing”命令生成configure.in文件。
(6)使用”configure”命令由configure、configure.in和config.h.in文件生成Makefile文件。

Autoscan会在给定目录及其子目录树中检查源文件,扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等。
aclocal:根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal.m4中。
--add-missing的定义是“add missing standard files to package”,它会让automake加入一个标准的软件包所必须的一些文件。
configure 是个shell脚本。

这样符合自由软件惯例的Makefile就生成好了,看一下当前目录发现已经这么多文件了!如果想清理一下怎么办呢?其实Automake早为我们想好了,它生成的Makefile功能很多: 
+ make:编译源代码,生成目标文件 
+ make clean:清除产生的object文件(后缀为“.o”的文件)及可执行文件 
+ make install:将编译好的可执行文件安装到系统目录,一般为/usr/local/bin 
+ make dist:生成软件发布包(distribution package),将可执行文件及相关文件打包成”PACKAGE-VERSION.tar.gz”。其中PACKAGE和VERSION可以在configure.in中通过AM_INIT_AUTOMAKE(PACKAGE, VERSION)定义。
+ make distcheck:查看发布包是否正确,解压并执行./configure和make来确认 ,来确认编译不出现错误,最后提示你软件包已经准备好,可以发布了。
+ make distclean:类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile。

 

大家可以看到configure.in内容是一些宏定义,这些宏经autoconf处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。configure.in文件中的宏的顺序并没有规定,但是你必须在所有宏的最前面和最后面分别加上AC_INIT宏和AC_OUTPUT宏。

  autoconf 是用来生成自动配置软件源代码脚本(configure)的工具。configure脚本能独立于autoconf运行,且在运行的过程中,不需要用户的干预。

  要生成configure文件,你必须告诉autoconf如何找到你所用的宏。方式是使用aclocal程序来生成你的aclocal.m4。

  aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”。

  autoconf从configure.in这个列举编译软件时所需要各种参数的模板文件中创建configure。

  autoconf需要GNU m4宏处理器来处理aclocal.m4,生成configure脚本。

  m4是一个宏处理器。将输入拷贝到输出,同时将宏展开。宏可以是内嵌的,也可以是用户定义的。除了可以展开宏,m4还有一些内建的函数,用来引用文件,执行命令,整数运算,文本操作,循环等。m4既可以作为编译器的前端,也可以单独作为一个宏处理器.

configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来。

 

你可能感兴趣的:(工具)