2016-12-31 97 views
5

我想建立一个不同的构建系统库,但在库文件需要运行由autoconf生成的配置脚本后生成的config.h头文件中禁用依赖跟踪。如何配置脚本

这是我下面尝试并生成所需要

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

构建系统保证了图书馆gflags将被链接的config.h文件步骤的顺序和头将可在预处理时间。但configure脚本以下错误退出

​​

有一些方法我可以得到需要的库文件(如GFLAGS)的列表,然后将参数传递给configure脚本,告诉它的假设,这个库是否存在在系统上?我通过帮助输出拍得既autoreconf./configure,却不能算出这个。

对不起,长的解释和解决问题。我对autoconf等很陌生

回答

5

您的问题的答案是:不,从autotools不可能获得依赖关系列表。

为什么?

嘛,自动工具没有跟踪所有的依赖。 而是检查系统上是否存在特定功能(例如给定的头文件或给定的库文件)。 现在,特定的头文件可以来自各种来源,例如,取决于你的分布foo.h报头可以经由

  • libfoo-dev(Debian和衍生物)
  • foo-devel(Fedora的)
  • foo(上游)被安装
  • ...

在你的具体情况,你的项目的维护者输出一个很好的错误信息,告诉你按名称安装一个给定的包。

项目的维护者也选择了致命错误中止如果给定的依赖关系是不可用的。 其原因很可能是,该项目根本就没有这种依赖性工作,这是不可能的编译程序没有它。

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

有希望

然而,并非所有都是坏的。 你configure脚本可能会禁用某些功能(这似乎是默认硬需求)的能力。

只是检查./configure --help,寻找标志像

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

自动化?

有一点了解自动工具,是configure真的是一个程序(源代码是configure.ac)写一些晦涩难懂的编程语言(包括bashm4), 这意味着它几乎可以有任何的行为,并没有实现“dependecy跟踪”没有单一的标准方式。

2

你想要做的事情不会像umläute所说的那样工作。在另一方面,这取决于你试图建立的包,你可以告诉./configure给定库是有,即使事实并非如此。

如果脚本使用pkg-config来检查库的存在。例如,你可以使用FOO_CFLAGSFOO_LIBS覆盖存在检查,并告诉它“是这些包在那里,你只是不知道怎么找他们”,但这些都是非常封装专用的,所以你可能需要提供更多的信息,如果这就是你要找的内容。