【发布时间】: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