如何禁用配置脚本中的依赖关系跟踪

Cur*_*ous 6 automake autoconf configure

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

这是我尝试生成所需config.h文件的一系列步骤

autoreconf -ivf 
./configure --disable-dependency-tracking
Run Code Online (Sandbox Code Playgroud)

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

configure: error: Please install google-gflags library
Run Code Online (Sandbox Code Playgroud)

有什么方法可以获得所需库的列表(例如gflags),然后将参数传递给configure脚本,告诉它假设该库存在于系统中?我经历了两者的帮助输出,autoreconf并且./configure无法解决这个问题.

很抱歉有很长的解释和问题.我很新autoconf,等等.

uml*_*ute 5

您的问题的答案是:不,不可能从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)编写的程序(源代码),这意味着它实际上可以有任何行为,并且没有单一的标准方法来实现"依赖追踪".