我有一个类似于
的存储库configure.ac
GNUmakefile.in
src
|--lib
|--bin
其中src/lib
包含要构建的共享库的源,src/bin
包含多个二进制文件的源(其中一个包含同一目录中的多个静态库)。
我在this post中看到我可以通过使用AC_SUBST在自定义变量中保存找到的库的名称来解决问题1。但是,当使用像AC_SEARCH_LIBS
这样的循环宏时,如何保存第一个找到的库的名称(无论它是什么),即:
AC_SEARCH_LIBS([func], [lib_name_on_linux lib_name_on freebsd], [AC_SUBST([MYLIB], [????])])
一种解决方法是对AC_CHECK_LIB
进行两次不同的调用:
AC_CHECK_LIB([lib_name_on_linux], [func], [AC_SUBST([MYLIB], ["-llib_name_on_linux"])])
AC_CHECK_LIB([lib_name_on_freebsd], [func], [AC_SUBST([MYLIB], ["-llib_name_on_freebsd"])])
这样可以工作,因为只有上述AC_CHECK_LIB
中的一个会成功,但它很难看,如果没有其他代码,如果我想打印错误(如果没有找到),它将无法工作。这样做的正确方法是什么?
答案 0 :(得分:3)
根据documentation,AC_SEARCH_LIBS
在ac_cv_search_(function)
变量中缓存生成的库名称。但它确实有两个特殊值(no
和none required
),但您必须具备特殊情况。所以你的代码看起来像这样:
AC_SEARCH_LIBS([func], [libname_linux libname_freebsd], [
AS_IF([test x$ac_cv_search_func != "xnone required"],
[MYLIB=$ac_cv_search_func], [MYLIB=])
AC_SUBST([MYLIB])
], [
AC_MSG_ERROR([No library found that provides func()])
])