【问题标题】:How to disable tracking of a dependency in configure script如何在配置脚本中禁用对依赖项的跟踪
【发布时间】:2017-05-15 12:07:43
【问题描述】:

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

这是我尝试生成所需的config.h 文件的步骤顺序

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

构建系统保证库gflags 将被链接,并且标头将在预处理时可用。但是configure 脚本退出并出现以下错误

configure: error: Please install google-gflags library

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

对于冗长的解释和问题,我们深表歉意。我对autoconf等很陌生。

【问题讨论】:

    标签: configure autoconf automake


    【解决方案1】:

    您的问题的答案是:不,不可能从 autotools 中获取依赖项列表

    为什么?

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

    安装
    • libfoo-dev(Debian 及其衍生产品)
    • foo-devel (Fedora)
    • foo(上游)
    • ...

    在您的具体情况下,您的项目的维护人员会输出一个很好的错误消息,告诉您按名称安装给定的包。

    如果给定的依赖项不可用,您的项目的维护人员也会选择中止并出现致命错误。 原因很可能是,没有这种依赖,项目根本无法工作,没有它就无法编译程序。

    示例

    您的项目可能是用C++ 编写的,因此需要C++ 编译器。 显然,将一些标志传递给 ./configure 几乎没有什么用处,因此它假设如果实际上没有可用的 C++ 编译器

    有希望

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

    只需检查 ./configure --help 并查找类似的标志

    • --enable-FOO
    • --disable-FOO
    • --with-BAR
    • --without-BAR

    自动化?

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

    【讨论】:

      【解决方案2】:

      您正在尝试做的事情不会像umläute 已经说过的那样起作用。另一方面,根据您尝试构建的包,您可能能够告诉./configure 给定的库存在,即使它不存在。

      例如,如果脚本使用pkg-config 来检查库的存在,您可以使用FOO_CFLAGSFOO_LIBS 来覆盖存在检查并告诉它“是的,那些包在那里,你只是不”不知道如何找到它们”,但这些都是特定于软件包的,因此如果您正在寻找这些信息,您可能需要提供更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-22
        • 2012-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        • 1970-01-01
        • 2015-11-15
        相关资源
        最近更新 更多