环境:
Ubuntu 12.04.1 LTS
Autoconf 2.65
Automake 1.10.2
文件目录结构:
./
./include
./include/test/Test.h
./src
./src/test/Test.cpp
./app
./app/test/main.cpp
注:其中include目录放置头文件,src放置cpp文件,app放置要生成的可执行应用程序。
第一步:
运行 autoscan , 自动创建两个文件: autoscan.log configure.scan
第二步:
修改configure.scan的文件名为configure.in,并修改configure.in的内容为:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.65])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])
#添加自动编译宏,automake必备
AM_INIT_AUTOMAKE(fzuir,1.0)
AC_PROG_CXX
AC_PROG_CC
#动态链接库,如果是静态链接库,使用AC_PROC_RANLIB
AC_PROG_LIBTOOL
#需要生成的Makefile
AC_CONFIG_FILES([Makefile
include/Makefile
src/test/Makefile
src/Makefile
app/test/Makefile
app/Makefile
])
AC_OUTPUT
第三步:
运行 aclocal, 生成一个“aclocal.m4”文件和一个缓冲文件夹autom4te.cache,该文件主要处理本地的宏定义。
第四步:
运行 autoconf, 目的是生成 configure。运行 autoheader,它负责生成config.h.in文件。该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h”文件。
第五步:
编写Makefile.am,根目录./下的Makefile.am内容为
SUBDIRS = include src app
注:SUBDIRS表示有子目录。
src下的Makefile.am内容为
SUBDIRS=test
#指定生成链接库的名称,注意:这里如果生成动态库,不能写为.so而要写成.la
lib_LTLIBRARIES = libfzuir.la
#如果要生成静态库,应写为:
#lib_LIBRARIES = libfzuir.a
libfzuir_la_SOURCES =
libfzuir_la_LIBADD = \
test/libtest.la
src/test下到Makefile.am为
INCLUDES = -I $(top_srcdir)/include
noinst_LTLIBRARIES = libtest.la
libtest_la_SOURCES = \
Test.cpp
include下到Makefile.am内容为
#find . -name "*.h" | sed -e 's/^\.\///' | sed -e 's/^.*$/ & \\/' | sort
nobase_include_HEADERS = \
test/Test.h
app下的Makefile.am内容为
SUBDIRS = test
app/test下的Makefile.am内容为
INCLUDES = -I ${top_srcdir}/include
bindir = ${exec_prefix}/fzuir/bin
#指定生成程序的名称
bin_PROGRAMS = test
#指定所需的源代码
test_SOURCES = \
main.cpp
#指定所需的链接库文件
LDADD = \
$(top_builddir)/src/libfzuir.la
第六步:
运行automake --add-missing生存Makefile.in。但是碰到一些问题:
guoguo@guoguo:~/workspace/fzuir2$ automake --add-missing
Useless use of /d modifier in transliteration operator at /usr/local/share/automake-1.10/Automake/Wrap.pm line 60. 【1】
configure.in:16: required file `./ltmain.sh' not found 【2】
Makefile.am: required file `./NEWS' not found 【3】
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found
解决办法:
1.第一个是因为automake1.10.2的一个bug,后面安装成1.11.3就没有那个提示了。
2.第二个错误需要 运行libtoolize --automake --copy --debug --force
3.那些提示not found,就建几个相应的文件。
第七步:
运行./configure生成Makefile。
第八步:
运行make编译。