我使用 autoconf 生成了一个配置脚本来构建我的项目。
除非我没有安装一些需要的库,否则它工作正常。Make 在缺少某些文件时返回错误,但我认为它应该由配置脚本实际检查?
所以我的问题是:如何修改 autoconf 生成的脚本来寻找依赖关系并告诉用户它缺少哪些库?
我使用 autoconf 生成了一个配置脚本来构建我的项目。
除非我没有安装一些需要的库,否则它工作正常。Make 在缺少某些文件时返回错误,但我认为它应该由配置脚本实际检查?
所以我的问题是:如何修改 autoconf 生成的脚本来寻找依赖关系并告诉用户它缺少哪些库?
取决于依赖关系,没有通用的解决方案。
AC_CHECK_LIB
如果库和AC_SEARCH_LIBS
头文件安装在标准位置,则有些宏可能对您有用。
现在许多软件包都支持pkg-config
或类似的东西,它允许您检查库的存在,并且还可以为您提供所需的编译器和链接器标志。
对于不适用于 AC 宏且不支持pkg-config
或类似的软件包,您可能必须自己编写大量脚本来确定依赖项是否可用以及它需要哪些编译器和链接器选项。即便如此,也很难使其便携。
是的,您想在配置时执行检查。在您的中粘贴如下代码(感谢 Shlomi Fish)configure.ac
:
if test "x$requires_libavl" = "xyes" ; then
AC_CHECK_LIB(avl, avl_create, [], [
echo "Error! You need to have libavl around."
exit -1
])
fi
请注意,如果您有 2.5 之前的 autoconf,您将使用它configure.in
。
我过去这样做的方法是编写一个简单的程序,该程序要么拉入必要的头文件,要么链接到必要的库,然后在配置脚本中编译/链接。如果失败,您会发出一条消息,指出不满足要求。我会提供更多详细信息,但代码位于不再与我们在一起的驱动器上。