【发布时间】:2018-01-21 12:31:44
【问题描述】:
我有一个看起来像这样的存储库
configure.ac
GNUmakefile.in
src
|--lib
|--bin
其中src/lib 包含要构建的共享库的源代码,src/bin 包含多个二进制文件的源代码(其中一个包含同一目录中的多个静态库)。
- 问题 1:有些二进制文件也需要链接第三方库,但不是全部
- 问题 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 中只有一个会成功,但它很丑陋,如果我想打印一个错误,如果两者都找不到,它不会在没有额外代码的情况下工作。这样做的正确方法是什么?
【问题讨论】: