configure - 如何在配置脚本中禁用对依赖项的跟踪

标签 configure autoconf automake

我正在尝试使用不同的构建系统构建一个库,但库中的文件需要 config.h运行autoconf生成的configure脚本后生成的头文件。

这是我尝试生成 config.h 所遵循的步骤序列需要的文件

autoreconf -ivf 
./configure --disable-dependency-tracking

构建系统保证库gflags将被链接并且标题将在预处理时可用。但是configure脚本退出并出现以下错误
configure: error: Please install google-gflags library

有什么方法可以获取所需库的列表(例如 gflags),然后将参数传递给配置脚本,告诉它假设该库存在于系统中?我查看了 autoreconf 的帮助输出和 ./configure并且无法弄清楚这一点。

很抱歉长时间的解释和问题。我对 autoconf 很陌生, 等等。

最佳答案

您的问题的答案是:不,无法从 autotools 获取依赖项列表。

为什么?

好吧,autotools 根本不跟踪依赖项。
相反,它会检查系统上是否存在特定功能(例如给定的头文件;或给定的库文件)。
现在一个特定的头文件可以来自各种来源,例如取决于您的发行版 foo.h头可以通过安装

  • libfoo-dev (Debian 和衍生产品)
  • foo-devel (Fedora)
  • foo (上游)
  • ...

  • 在您的特定情况下,您项目的维护者会输出一条很好的错误消息,告诉您按名称安装给定的包。

    如果给定的依赖项不可用,您的项目的维护者也会选择中止并出现 fatal error 。
    原因很可能是,如果没有该依赖项,该项目根本无法运行,并且没有它就不可能编译程序。

    例子

    你的项目可能写在 C++因此需要一个 C++ -编译器。
    显然,将一些标志传递给 ./configure 几乎没有用,所以它 假设 如果实际上没有 C++ 编译器可用。

    还有希望

    然而,并非一切都是坏事。
    您的 configure脚本可能能够禁用某些功能(默认情况下似乎是硬性要求)。

    只需检查 ./configure --help并寻找像这样的标志
  • --enable-FOO
  • --disable-FOO
  • --with-BAR
  • --without-BAR

  • 自动化?

    关于 autotools 需要了解的一件事是 configure真的是一个程序(源代码是 configure.ac )用某种神秘的编程语言(涉及 bashm4 )编写,
    这意味着它实际上可以有任何行为,并且没有单一的标准方法来实现“依赖跟踪”。

    关于configure - 如何在配置脚本中禁用对依赖项的跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41408952/

    相关文章:

    configure - 从非标准位置构建 guile 时找不到 libunistring

    android - Android项目:gradle配置失败

    c++ - 使用 autotools 安装前缀

    autoconf - 配置脚本如何决定自己重新生成

    makefile - 使用 autoconf/automake,如何指定包含文件路径?

    build - 条件子目录对象

    c - 如何使用自定义 libopenssl 构建 openldap

    java - 如何为所有类配置log4j fileappender?

    cmake - 替换 CMake 中的 AC_CHECK_LIB

    Gnu autotools 缺少文件 depcomp