如何在配置脚本

时间:2016-12-31 14:03:02

标签: configure autoconf automake

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

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

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

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

configure: error: Please install google-gflags library

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

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

2 个答案:

答案 0 :(得分:5)

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





为什么?< / h2>&#xA;&#xA;

嗯,autotools根本不跟踪依赖关系。&#xA;而是检查系统上是否存在特定功能(例如给定的头文件;或者给定的库文件)。&#xA;现在特定的头文件可以来自各种来源,例如根据你的发行版, foo.h 标题可以通过

&#xA;&#xA;
    &#xA;
  • libfoo-dev (Debian和衍生品)
  • &#xA;
  • foo-devel (Fedora)
  • &#xA;
  • foo (上游)
  • &#xA;
  • ...
  • &#xA;
&#xA;&#xA;

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

&#xA;&#xA;

如果给定的依赖项不可用,项目的维护者也会选择中止致命错误。&#xA;原因很可能是,如果没有这种依赖关系,项目就无法工作,没有它就无法编译程序。

&#xA;&#xA;

示例

&#xA;&#xA;

您的项目可能用 C ++ 编写,因此需要 C ++ -compiler。&#xA;显然那里在将一些标志传递给./configure时很少使用假设有一个C ++编译器可用如果实际上是e是没有。

&#xA;&#xA;

有希望

&#xA;&#xA;

然而,并非一切都不好。&#xA;你的< code> configure 脚本可能会禁用某些功能(默认情况下似乎是硬性要求)。

&#xA;&#xA;

只需检查 ./配置--help 并查找标志,如

&#xA;&#xA;
    &#xA;
  • - enable-FOO
  • &#XA;
  • <代码> - 禁用-FOO
  • &#XA;
  • <代码> - 与-BAR
  • &#XA ;
  • <代码> - 无-BAR
  • &#XA;
&#XA;&#XA;

自动化

&#XA;& #xA;

关于autotools的一件事是, configure 实际上是用一些神秘的编程语言编写的程序(源代码是 configure.ac ) (涉及 bash m4 ),&#xA;这意味着它实际上可以有任何行为,并且没有单一的标准方法实现“依赖跟踪”。

&#xA;

答案 1 :(得分:2)

你想要做的事情不会像umläute所说的那样有效。另一方面,根据您尝试构建的包,您可以告诉./configure即使不存在给定的库,也可以。{/ p>

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