Aay*_*ura 1 autoconf autotools
我有一个看起来像这样的存储库
configure.ac
GNUmakefile.in
src
|--lib
|--bin
Run Code Online (Sandbox Code Playgroud)
其中src/lib包含要构建的共享库的源代码,src/bin包含多个二进制文件的源代码(其中一个由同一目录中的多个静态库组成)。
我在这篇文章中看到,我可以通过使用 AC_SUBST 将找到的库的名称保存在自定义变量中来解决问题 1。但是,当使用像这样的循环宏时,如何保存第一个找到的库的名称(无论它是什么)AC_SEARCH_LIBS,即:
AC_SEARCH_LIBS([func], [lib_name_on_linux lib_name_on freebsd], [AC_SUBST([MYLIB], [????])])
Run Code Online (Sandbox Code Playgroud)
一种解决方法是进行两次不同的调用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"])])
Run Code Online (Sandbox Code Playgroud)
这会起作用,因为上面只有一个AC_CHECK_LIB会成功,但它很丑陋,如果我想打印错误(如果两者都没有找到),那么如果没有额外的代码,它就无法工作。这样做的正确方法是什么?
根据文档,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()])
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
467 次 |
| 最近记录: |