在自定义变量中保存找到的 AC_SEARCH_LIBS 的名称

Save name of found AC_SEARCH_LIBS in a custom variable

我有一个类似于

的存储库
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 之一会成功,但它很丑陋,如果我想在两者都找不到时打印错误,那么如果没有额外的代码,它就不会起作用。正确的做法是什么?

根据documentationAC_SEARCH_LIBS 将生成的库名称缓存在ac_cv_search_(function) 变量中。不过,它确实有两个特殊值(nonone 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()])
])