在 configure script/Autotools 中设置配置选项,Boost 安装在一个不寻常的位置(EPEL alternative boost installs)

Setting configure options inside the configure script/Autotools with Boost installed in an unusual location (EPEL alternative boost installs)

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

不幸的是,由于它安装在一个稍微不寻常的位置(/usr/include/boost169和 /usr/lib64/boost169)。可以通过设置 --with-boost=[include dir]--with-boost-libdir=[lib dir] 使其与 ax_boost_*.m4 一起工作;然而,这是一个适用于大型团队的构建系统,我不希望每个人每次都必须手动设置它,因为它在我们所有的构建中总是相同的。

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

其次...这是否是解决此问题的正确方法,或者是否有更简洁的方法来设置整个过程?

First, Is there a good way to optionally set the configure options inside configure.ac?

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

It's pretty easy to check if the directories are there, and I could set --with-boost and --with-boost-libdir before calling AX_BOOST_BASE if the user hasn't already set them. This would let me make my own boost M4 file that checks if a newer version of Boost is installed to an EPEL location and if so, set those options and use it.

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

所以

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

Second... is this even the right way to go about this, or is there a cleaner way to set up the entire process?

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

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

仍然有用且适当