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