在自定义变量中保存找到的 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
包含多个二进制文件的源代码(其中一个包含同一目录中的多个静态库)。
- 问题 1:一些二进制文件也需要 link 与第三方库一起使用,但不是全部
- 问题 2:其中一个库在 Linux 和 FreeBSD
上的命名不同
我在 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
之一会成功,但它很丑陋,如果我想在两者都找不到时打印错误,那么如果没有额外的代码,它就不会起作用。正确的做法是什么?
根据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()])
])
我有一个类似于
的存储库configure.ac
GNUmakefile.in
src
|--lib
|--bin
其中 src/lib
包含要构建的共享库的源代码,src/bin
包含多个二进制文件的源代码(其中一个包含同一目录中的多个静态库)。
- 问题 1:一些二进制文件也需要 link 与第三方库一起使用,但不是全部
- 问题 2:其中一个库在 Linux 和 FreeBSD 上的命名不同
我在 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
之一会成功,但它很丑陋,如果我想在两者都找不到时打印错误,那么如果没有额外的代码,它就不会起作用。正确的做法是什么?
根据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()])
])