环境:
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
#find . -name "*.h" | sed -e 's/^\.\///' | sed -e 's/^.*$/ & \\/' | sort nobase_include_HEADERS = \ test/Test.h
SUBDIRS = test
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编译。