ZY's WordPress ? automake,autoconf 使用方法汇集

来源:百度文库 编辑:神马文学网 时间:2024/04/29 16:31:19

随着工程的增大,终于走到了用自己写的 Makefile 无法管理的地步,用 eclipse-cdt 生成 Makefile 也有点欠火候,开始使用 automake 和 autoconf 来管理工程构建、配置项。automake、autoconf 合称 autotools,通常和 libtool 配合使用,管理 GNU make 风格的工程构建与部署。

在看完一些 autotools 的教程,以及使用它管理实际工程后,打算将参考和一些优秀的教程做个整理,如下:

参考

  1. "GNU Autoconf, Automake, and Libtool" (Gary V. Vaughan, Ben Elliston, Tom Tromey and Ian Lance Taylor),GNU 官方推荐的 autotools 使用详解书籍,俗称 autobook,书本身也是开源的,可以自由下载和阅读,书稿托管在 Redhat 的网站。

  2. autoconf、automake 的 GNU 文档,中文翻译版,均由王立翻译,对应的 autoconf 和 automake 版本有些早了:

    Automake (for version 1.3, April 1998):收藏地址,原址。

    Autoconf (for version 2.13, December 1998):收藏地址,原址。

文章与教程

  1. 《使用 GNU autotools 改造一个软件项目》(及永刚),以工程构建实例为中心,内容涵盖入门使用和一些进阶方法,属于实用类的教程,看完后基本可以组织中等规模的实际工程,涉及到库依赖检查、不同工程配置项的构建等话题。

  2. 《例解 autoconf 和 automake 生成 Makefile 文件》(杨小华,苏春艳),内容涵盖从 automake 和 autoconf 的入门使用到管理 deep 类型工程组织的构建方法,包括工程中 可执行文件、静态库 的构建配置方法。深度上:所讲略有轻笔带过,所以建立复杂工程组织的 autoconf、automake 配置文件(configure.in、Makefile.am)时,写法细节仍需参考手册。

  3. 《轻轻松松产生 Makefile》(许明彦),文章有点历史了(1999 年稿),内容属于 autotools 入门类教程,我第一次搞 automake 时感觉此文很好,能让你很快上手。但对于大项目、工程,比如:多配置项(configuration)工程(Debug/Release,Cygwin/Linux 如是)的构建、部署、打包管理就力所不及了。

实例

附一个我自己的实例,只管理 Debug 配置项的工程构建,没有用 GNU 范例的管理结构,而使用单 Makefile 管理(容易在 eclipse-cdt 中管理),除非理解,切勿抄用。

configure.in

  01 #                                               -*- Autoconf -*- 02 # Process this file with autoconf to produce a configure script. 03    04 AC_PREREQ([2.65]) 05 AC_INIT(BabyProject, 1.0, silon212@gmail.com) 06 AC_CONFIG_SRCDIR([../src/main.cpp]) 07 AM_INIT_AUTOMAKE(BabyProject, 1.0) 08    09 # Checks for programs. 10 AC_CYGWIN 11    12 CXXFLAGS="-O0 -g3 -Wall -fmessage-length=0" 13    14 AC_DEFINE(_DEBUG) 15    16 # DEFS="-D_DEBUG=1" 17    18 AC_PROG_CXX 19 AC_PROG_CC 20    21 # Checks for libraries. 22    23 # Checks for header files. 24    25 # Checks for typedefs, structures, and compiler characteristics. 26 # Checks for library functions. 27    28 AC_OUTPUT([Makefile])

Makefile.am

  01 AUTOMAKE_OPTIONS=foreign 02 CURRENTPATH=$(shell /bin/pwd) 03    04 bin_PROGRAMS=BabyProject 05 BabyProject_SOURCES=../src/main.cpp ../src/common.cpp ../src/common.h 06    07 boost_INCLUDES=-I/cygdrive/d/source/cpp/lib/boost/boost_1_42_0 08 INCLUDES=-I../src $(boost_INCLUDES) 09    10 export INCLUDES