0

我目前正在研究在 RHEL7 上运行的基于 Autotools 的构建系统。Boost 的系统版本相当旧(1.53),但是通过 EPEL(1.69)提供了一个较新的版本。一些最近添加到 Boost 中的库需要这个较新的版本,例如 Boost::Log。

不幸的是,由于它安装在一个稍微不寻常的位置(/usr/include/boost169 和 /usr/lib64/boost169),它不能与标准 Autotools Boost 引导脚本 boost.m4 或 ax_boost_*.m4 透明地工作. --with-boost=[include dir]可以通过设置和来使其与 ax_boost_*.m4 一起使用--with-boost-libdir=[lib dir];但是,这是一个大型组的构建系统,我不希望每个人每次都必须手动设置它,因为它在我们所有的构建中总是相同的。

所以我正在寻找两件事。首先,有没有一种好方法可以选择在 configure.ac 中设置配置选项?检查目录是否存在非常容易,如果用户尚未设置它们,我可以在调用 AX_BOOST_BASE 之前设置 --with-boost 和 --with-boost-libdir 。这将让我制作自己的 boost M4 文件,检查是否将更新版本的 Boost 安装到 EPEL 位置,如果是,设置这些选项并使用它。

其次......这甚至是正确的方法,还是有更清洁的方法来设置整个过程?

4

1 回答 1

1

首先,有没有一种好方法可以选择在 configure.ac 中设置配置选项?

我带你去问你是否可以修改你configure.ac的人为注入程序参数,这些参数将被识别和处理,就好像它们是在命令行上指定的一样。据我所知,不,如果不破解 Autoconf 本身,就没有办法做到这一点。

检查目录是否存在非常容易,如果用户尚未设置它们,我可以在调用 AX_BOOST_BASE 之前设置 --with-boost 和 --with-boost-libdir 。这将让我制作自己的 boost M4 文件,检查是否将更新版本的 Boost 安装到 EPEL 位置,如果是,设置这些选项并使用它。

当未指定选项时,修改以改变行为可行的,但似乎您可能想得太小了。如果您正在配置一个需要某个最低版本的 Boost 的包,那么您应该通过它的第一个(可选)参数来表达它。这本身可能不足以满足您的需求,但是应该拒绝太旧的版本足够了。在这种情况下,它看起来像是退回到检查其他位置,并且您可以其中教它检查您需要处理的表单的位置。AX_BOOST_BASE--with-boost*AX_BOOST_BASEAX_BOOST_BASE

所以

  1. 确保您的 configure.ac 指定了适当的最低 Boost 版本
  2. AX_BOOST_BASE包括一个知道如何检查您要使用的图书馆位置的聪明人

其次......这甚至是正确的方法,还是有更清洁的方法来设置整个过程?

我建议的变体对我来说似乎是合理的并且非常干净,但它需要一些工作才能实现。多少取决于您对 shell 和 Autoconf 编程的熟悉程度。您可能会考虑将生成的修改后的宏贡献回 Autoconf 存档(并从那里从最新版本开始),因为这将减少必须再次执行此操作的可能性。

另一种更简单的替代方法是提供一个configure使用所需选项运行的包装脚本,并指示团队使用它而不是configure直接运行。在这种情况下,确保将可接受的最低 Boost 版本传递给AX_BOOST_BASE.

于 2019-08-24T13:37:41.770 回答