Autoconf学习——GNU构建系统
2 The GNU Build System
Autoconf探测依赖于系统的构建和运行时信息,但这只是可移植软件开发的一部分。GNU Build System包括Autoconf、Automake和Libtool,这一套工具主要用于开发可移植性软件。
2.1 Automake
make的大量使用意味着makefile是软件自动化构建规则的必由之路,但它存在很多的限制。它缺少自动化依赖跟踪,子目录循环构建、可靠时间戳(譬如网络系统)等,这意味着程序员必须痛苦地做重复的事情。makefile的可移植性 是非常重要的。即使你使用Autoconf,你也必须在Makefile.in文件中插入重复的代码来组织@CC@,@CFLAGS@,以及由configure提供的代替品。Automake允许你在Makefile.am文件中根据构建需要使用比普通makefile更简单更强大的语法来指定构建所需,从而产生一个可移植的Makefile.in文件供Autoconf使用。例如,用于构建和安装一个简单的“Hello world”程序的Makefile.am文件如下所示:
bin_PROGRAMS = hello
hello_SOURCES = hello.c
长生的Makefile.in文件将自动支持所有的标准目标、Autoconf提供的substitutions、自动依赖检查、VPATH构建等。
make构建hello程序,make install安装它到/usr/local/bin(或者其他指定的路径,在configure中指定)。对于大型项目(特别是有子目录的),Automake的优点更加突出。
2.2 Gnulib
Gnulib的目标是为了在自由软件包中共享。
Gnulib模块通常包含Autoconf宏和C源代码。2.3 Libtool
通 常,我们不仅想去安装程序,而且还想安装库,从而使得其它的程序能够共享我们的劳动果实。其实人们更喜欢去生成共享库(动态链接),这些库能够被多个程序 所使用,但是去不需要在磁盘或者内存中复制它们,而且能够独立于连接程序进行升级。但是,兼容的创建共享库是一件非常困难的事情——每个系统由他自有的不 被兼容的工具,编译标志,以及其他乱七八糟的东西。不过幸运的是,gnu提供了一个解决方案:libtool。
Libtool将会为你处理编译共享库的所有要求,在目前这似乎是满足兼容性的唯一办法。它还能处理许多其他的难题,例如:make规则和共享库各个后缀之间的交互,在被超级用户安装之前如何可靠地连接共享库,以及提供一个持续的版本系统(因此一个库的不同版本能够被安装或者被升级,而不影响兼容性)。尽管跟Autoconf一样,libtool也能在没有Automake的情况下使用,但是它还是经常的跟Automake一起使用——在任何需要共享库的情况下,libtool都将会被自动调用,而你却并不需要知道它的语法。
2.4 Pointers
那些只在单一系统的小项目上使用make的简单特性的开发者可会在学习Autoconf和Automake时望而却步。但是当你的软件在多于两个用户之间发布的时候,你马上就会发现你花了大量的精力去完成gnu build tools本能提供的功能,而且还可能一次又一次犯下同样的错误。(而且,因为你已经学会了Autoconf,那么Automake就只是个小case了。)
你能够从许多地方获得关于gnu构建工具的更多的信息。
- Web
The project home pages for Autoconf, Automake, Gnulib, and Libtool.
- Automake Manual
See Automake, for more information on Automake.
- Books
The book GNU Autoconf, Automake and Libtool1 describes the complete GNU build environment. You can also find the entire book on-line.

浙公网安备 33010602011771号