Autotoolset 学习笔记

我还是觉得,从一个例子入手来学习比直接看一个详尽全面的功能说明文档要舒 服得多,但是这个文档又是必不可少的,在例子里面遇到不能自明的情况下就需 要查阅文档了。

下面我们就来看一个例子,用于创建《C++ Primer》里面的那个 word_search 的一个不完整的例子的工程。首先使用 acmkdir 来创建一个默认框架:

acmkdir word_search

回答一系列问题之后默认框架就创建好了。现在打开 configure.ac ,因为我们 要编译 C++ 文件,所以需要检查 C++ 编译器,在里面加入一行:

AC_PROG_CXX

然后把源文件拷贝到 src 目录里面去:

src
 +---- main.cpp
 |
 +---- filter.h
 |
 +---- types.h
 |
 `---- filter
        +---- word.cpp
        |
        `---- line.cpp

由于我们还需要在 filter 子目录下放 Makefile ,所以我们还需要修改 configure.ac ,添加那个子目录:

AC_CONFIG_FILES([
   Makefile
   README
   doc/Makefile
   m4/Makefile
   src/Makefile
   src/filter/Makefile
])

然后在 src/Makefile.am 里面添加子目录 filter 并写入要创建的程序的信息 :

SUBDIRS = filter

bin_PROGRAMS = word_search
word_search_SOURCES = main.cpp types.h filter.h
word_search_LDADD = $(top_builddir)/src/filter/libfilter.a

当然也需要在 src/filter 里面建立 Makefile.am :

noinst_LIBRARIES = libfilter.a
libfilter_a_SOURCES = word.cpp line.cpp
INCLUDES = -I$(top_srcdir)/src

现在可以在工程的根目录下面执行重新建立的脚本了:

没有出错的话,接下来可以 configure && make 了。

测试过程序正常之后就可以通过

会创建出 word_search-0.0.1.tar.gz 和 word_search-0.0.1.tar.bz2 两个文 件来,他们就可以作为可发布的打包文件了。当然,发布之前事先填好 README 、 ChangeLog 等文件的内容是最好的了。