学习 GNU Autotools
总觉得自己写的Makefile不够地道
为什么不试试用autoconf/automake来产生makefile?
记得目前的开源软件的build过程么?
./configure, make, make install…
这里的makefile由configure scirpt产生。
而configure则由autoconf产生。
下面简单描述以下autotools的工作过程:
首先,建立一个configure.in文件,该文件由一系列的macro组成(比如,AC_INIT, AC_CHECK_XX, AC_CONFIG_FILES,AC_OUTPUT, etc.)
autoconf以该文件为input,产生configure script。
其次,需要为每个源码目录建立一个makefile.am文件。
该文件实际上由一系列类似 variable = value 的赋值语句组成,指定需要build的target program及其依赖的source file等等。
automake以makefile.am为输入,产生makefile.in文件。
然后,configure以makefile.in为input,产生所需要的makefile!
此外,autoheader以configure.in为输入,产生名为config.h.in的文件。configure在产生 makefile的同时,还以config.h.in为输入,产生config.h。这个文件实际上是将若干-DXXX编译flag以#define xxx的形式放在同一个文件中,从而避免了编译过程中出现冗长的编译标志。
如何写configure.in?
一种方法是手工编写该文件。具体过程请参见GNU autoconf mannual。
建议使用的标准宏调用顺序:(from GNU autoconf mannual)
autoconf requirements(AC_PREREQ)
AC_INIT
information on the package
checks for programs
checks for libs
checks for header files
checks for types
checks for structures
checks for compiler characteristics
checks for library functions
checks for system services
AC_CONFIG_FILES([file…])
AC_OUTPUT
另一种方法:在存放源码的目录中,运行autoscan,将产生configure.scan文件。
该文件通常需要简单修改,然后将其重命名为configure.ac(等价于configure.in)即可。
提到autoconf,不能不提到m4.
configure.in中就使用的实际上是一些内建的macro(这些macro由m4 expand?)
那么m4究竟是什么呢?
本质上讲,m4 is a macro expander.
但是m4 还提供了额外的功能:
manipulating text,
doing integar arithmetic,
running Unix commad,
including named file, etc.
据说,使用m4编程容易上瘾(addictive),常常让人用复杂的方法去解决一些简单的问题
heihei,really?
抛砖引玉。
抛砖引玉。
详见下列URL:
autoconf:http://www.gnu.org/software/autoconf
“The Goat Book” home page:http://sources.redhat.com/autobook/
Libtool: http://www.gnu.org/software/libtool/
http://linkhl.spaces.live.com/blog/cns!a0072ff8bd08d6aa!111.entry
转载请注明:在路上 » 学习 GNU Autotools