我正在尝试使用不同的构建系统构建一个库,但库中的文件需要 config.h
运行autoconf生成的configure脚本后生成的头文件。
这是我尝试生成 config.h
所遵循的步骤序列需要的文件
autoreconf -ivf
./configure --disable-dependency-tracking
构建系统保证库
gflags
将被链接并且标题将在预处理时可用。但是configure
脚本退出并出现以下错误configure: error: Please install google-gflags library
有什么方法可以获取所需库的列表(例如 gflags),然后将参数传递给配置脚本,告诉它假设该库存在于系统中?我查看了
autoreconf
的帮助输出和 ./configure
并且无法弄清楚这一点。很抱歉长时间的解释和问题。我对
autoconf
很陌生, 等等。
最佳答案
您的问题的答案是:不,无法从 autotools 获取依赖项列表。
为什么?
好吧,autotools 根本不跟踪依赖项。
相反,它会检查系统上是否存在特定功能(例如给定的头文件;或给定的库文件)。
现在一个特定的头文件可以来自各种来源,例如取决于您的发行版 foo.h
头可以通过安装
libfoo-dev
(Debian 和衍生产品)foo-devel
(Fedora) foo
(上游)在您的特定情况下,您项目的维护者会输出一条很好的错误消息,告诉您按名称安装给定的包。
如果给定的依赖项不可用,您的项目的维护者也会选择中止并出现 fatal error 。
原因很可能是,如果没有该依赖项,该项目根本无法运行,并且没有它就不可能编译程序。
例子
你的项目可能写在
C++
因此需要一个 C++
-编译器。显然,将一些标志传递给 ./configure 几乎没有用,所以它 假设 如果实际上没有 C++ 编译器可用。
还有希望
然而,并非一切都是坏事。
您的
configure
脚本可能能够禁用某些功能(默认情况下似乎是硬性要求)。只需检查
./configure --help
并寻找像这样的标志--enable-FOO
--disable-FOO
--with-BAR
--without-BAR
自动化?
关于 autotools 需要了解的一件事是
configure
真的是一个程序(源代码是 configure.ac
)用某种神秘的编程语言(涉及 bash
和 m4
)编写,这意味着它实际上可以有任何行为,并且没有单一的标准方法来实现“依赖跟踪”。
关于configure - 如何在配置脚本中禁用对依赖项的跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41408952/