我正在尝试使用不同的构建系统构建库,但库中的文件需要在运行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
等新手,
答案 0 :(得分:5)
您的问题的答案是:不,无法从autotools获取依赖项列表。


嗯,autotools根本不跟踪依赖关系。
而是检查系统上是否存在特定功能(例如给定的头文件;或者给定的库文件)。
现在特定的头文件可以来自各种来源,例如根据你的发行版, foo.h
标题可以通过
libfoo-dev 代码>(Debian和衍生品)
foo-devel
(Fedora) foo
(上游)在您的具体情况下,项目的维护者输出一个很好的错误消息,告诉您按名称安装给定的包。


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


您的项目可能用 C ++
编写,因此需要 C ++
-compiler。
显然那里在将一些标志传递给./configure时很少使用假设有一个C ++编译器可用如果实际上是e是没有。
然而,并非一切都不好。&#xA;你的< code> configure 脚本可能会禁用某些功能(默认情况下似乎是硬性要求)。
&#xA;&#xA;只需检查 ./配置--help
并查找标志,如
- enable-FOO
关于autotools的一件事是, configure
实际上是用一些神秘的编程语言编写的程序(源代码是 configure.ac
) (涉及 bash
和 m4
),&#xA;这意味着它实际上可以有任何行为,并且没有单一的标准方法实现“依赖跟踪”。
答案 1 :(得分:2)
你想要做的事情不会像umläute所说的那样有效。另一方面,根据您尝试构建的包,您可以告诉./configure
即使不存在给定的库,也可以。{/ p>
例如,如果脚本使用pkg-config
检查是否存在库,则可以使用FOO_CFLAGS
和FOO_LIBS
覆盖状态检查并告诉它“是的,这些包是在那里,你只是不知道如何找到它们“,但这些都是特定于包装的,所以如果你正在寻找它,你可能需要提供更多的信息。