Autotools - 需要一个例子

时间:2015-02-17 13:33:05

标签: c++ autotools autoconf automake

我希望得到一些关于基于automake的良好实践,工具包构建(编译)过程的帮助。我正在编写一个工具包,它包含几个外部和几个内部库以及演示工具。到目前为止,我正在编写自己的makefile脚本来编译它,但现在我想切换到autotools,这是我想从我的wanky脚本转移到更标准化的脚本。所以我正在寻找的是一些帮助,这是我可以学习的最小例子。这个最低限度的例子应符合"良好做法"原则并保留以下树结构:

toolkit/src/libint/ 
    libinternal.cpp libinternal.hpp 
toolkit/src/libext/ 
    externallib/ 
toolkit/bin/ 
    my binaries 
toolkit/demo/tool1/ 
    tool1.cpp tool1.hpp 
toolkit/demo/tool2/ 
    tool2.cpp tool2.hpp 
toolkit/lib/ 
    libinternal.a libexternal.a 
toolkit/include/libint/ 
    libinternal.hpp 
toolkit/include/libext/ 
    libexternal.hpp 

通常我在demo文件夹中将我的演示工具放在单独的子文件夹下,这些子文件夹使用include和lib文件夹中的头文件和库进行编译。这意味着在我的makefile中,我通常首先将库编译为include和lib文件夹,然后在构建工具包时编译工具。

任何人都可以为上面的树源结构提供所需的configure.ac和Makefile.am文件的最小示例(有关源树的任何建议都受到欢迎)

谢谢

1 个答案:

答案 0 :(得分:2)

第一个要求是您的库是独立安装还是链接到二进制文件 - 一个便利库 - 。

在这两种情况下,您都需要使用autoconf,automake和libtool。我将忽略configure.ac文件并将焦点放在Makefile.am中。该目录应如下所示:

  ./
    lib/
       Makefile.am 
       ...
    bin/
    ...
    Makefile.am 

在顶部的Makefile.am中你应该有这个:

 $ cat Makefile.am 
 SUBDIRS = . lib  # note the "." which means that the current directory is executed first 

在lib Makefile.am

 $ cat lib/Makefile.am
 noinst_LTLIBRARIES        = libexternal.a
 libexternal_a_SOURCES     = source.c source.h
 libexternal_a_LIBADD      = -lm

如果您希望独立安装库,只需将noinst替换为lib

因此lib Makefile.am将如下所示:

 $ cat lib/Makefile.am
 lib_LTLIBRARIES           = libexternal.a
 libexternal_a_SOURCES     = source.c source.h
 libexternal_a_LIBADD      = -lm