【问题标题】:Autotools - An example requiredAutotools - 需要一个例子
【发布时间】:2015-04-18 05:20:28
【问题描述】:

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

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 文件的最小示例(任何关于源树的建议都非常受欢迎)

谢谢你

【问题讨论】:

  • libext/externallib/ 是什么?如果它是外部的,为什么lib/ 需要一个副本?自动工具使用构建目录,目标是在指定的目录中安装库、头文件和程序:./configure --help
  • 我只是想更好地了解外部依赖项与您想要安装的内容。即,您可能不希望安装演示 - 仅用于测试等。不幸的是,自动工具的学习曲线非常陡峭;同时,this 可能是我见过的最好的教程。
  • 外部依赖是不属于系统的库,有些是不可安装的(旧库),如果移动到不同的操作系统,需要重新编译。这就是为什么我有 externallib/ 目录。但是如果这使事情复杂化并且因为我正在寻找一个学习示例,这可以被忽略。也许可以提供一个带有 boost 的示例。谢谢

标签: c++ autotools autoconf automake


【解决方案1】:

首先要确定您的库是独立安装还是链接到二进制文件——一个便利库——。

在这两种情况下,您都需要使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多