ZY's WordPress ? automake,autoconf 使用方法汇集
来源:百度文库 编辑:神马文学网 时间:2024/04/29 16:31:19
随着工程的增大,终于走到了用自己写的 Makefile 无法管理的地步,用 eclipse-cdt 生成 Makefile 也有点欠火候,开始使用 automake 和 autoconf 来管理工程构建、配置项。automake、autoconf 合称 autotools,通常和 libtool 配合使用,管理 GNU make 风格的工程构建与部署。
在看完一些 autotools 的教程,以及使用它管理实际工程后,打算将参考和一些优秀的教程做个整理,如下:
参考
-
"GNU Autoconf, Automake, and Libtool" (Gary V. Vaughan, Ben Elliston, Tom Tromey and Ian Lance Taylor),GNU 官方推荐的 autotools 使用详解书籍,俗称 autobook,书本身也是开源的,可以自由下载和阅读,书稿托管在 Redhat 的网站。
-
autoconf、automake 的 GNU 文档,中文翻译版,均由王立翻译,对应的 autoconf 和 automake 版本有些早了:
Automake (for version 1.3, April 1998):收藏地址,原址。
Autoconf (for version 2.13, December 1998):收藏地址,原址。
文章与教程
-
《使用 GNU autotools 改造一个软件项目》(及永刚),以工程构建实例为中心,内容涵盖入门使用和一些进阶方法,属于实用类的教程,看完后基本可以组织中等规模的实际工程,涉及到库依赖检查、不同工程配置项的构建等话题。
-
《例解 autoconf 和 automake 生成 Makefile 文件》(杨小华,苏春艳),内容涵盖从 automake 和 autoconf 的入门使用到管理 deep 类型工程组织的构建方法,包括工程中 可执行文件、静态库 的构建配置方法。深度上:所讲略有轻笔带过,所以建立复杂工程组织的 autoconf、automake 配置文件(configure.in、Makefile.am)时,写法细节仍需参考手册。
-
《轻轻松松产生 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