使用autoconf的库解析?

Aln*_*tak 20 autoconf

我正在构建我的第一个autoconf托管包.

但是,我找不到任何关于如何指定所需库的简单示例,并找到它可能位于不同位置的库.

我现在有:

AC_CHECK_LIB(['event'], ['event_init'])
Run Code Online (Sandbox Code Playgroud)

但:

  1. 它找不到安装的版本 /opt/local/lib
  2. 如果实际上没有找到库,它不会抱怨
  3. 我需要设置包括路径/opt/local/include

任何帮助,或体面教程的链接非常感谢...

dma*_*a_k 13

autoconf脚本无法猜测"可选"库位置,这可能因平台而异.所以你可以说

CPPFLAGS="-I/opt/local/include" LDFLAGS="-L/opt/local/lib" ./configure
Run Code Online (Sandbox Code Playgroud)

因为AC_CHECK_LIB()您需要在"action-if-false"参数中明确指定失败条件:

dnl This is simply print "no" and continue:
AC_CHECK_LIB([m], [sqrt123])
dnl This will stop:
AC_CHECK_LIB([m], [sqrt123], [], [AC_MSG_ERROR([sqrt123 was not found in libm])])
Run Code Online (Sandbox Code Playgroud)

输出:

checking for sqrt123 in -lm... no
checking for sqrt123 in -lm... no
configure: error: sqrt123 was not found in libm
Run Code Online (Sandbox Code Playgroud)

AC_CHECK_LIB() 默认情况下,由于显而易见的原因不会失败:可以检查几个提供类似功能的不同库并选择其中一个:)

也看看这篇文章的类似主题.

  • 更好的是,`./ configure CPPFLAGS = ...`它将记住后续`./config.status --recheck`中的变量.见http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Defining-Variables.html (4认同)

cod*_*gic 10

您需要手动设置CFLAGS,CXXFLAGS并且LDFLAGS如果你想GCC/G ++看在非标准位置.

所以,在打电话之前AC_CHECK_LIB(),做一些像

CFLAGS="$CFLAGS -I/opt/local/include"
CXXFLAGS="$CXXFLAGS -I/opt/local/include"
LDFLAGS="$LDFLAGS -L/opt/local/lib"
Run Code Online (Sandbox Code Playgroud)

如果您只在整个配置脚本中使用gcc,则不需要CXXFLAGS.

  • 不,不,不,不,不.你绝对不能在configure.ac中分配CFLAGS来自autoconf文档:"......包本身不应该设置用户变量......""CFLAGS就是这样一个变量." (14认同)
  • *FLAGS只能在configure.ac中临时设置,例如,以满足AC_CHECK_foo.最终必须恢复原始值. (3认同)
  • 我同意Alnitak的意思是建议使用CFLAGS/CXXFLAGS(取决于您打算使用的C/C++编译器)应仅用于编译器参数(例如"-g"," - O3").包括应该去CPPFLAGS(C预处理器). (2认同)

Joh*_*lin 10

如果库附带.pc文件,请考虑使用PKG_CHECK_MODULES()宏来执行您想要的操作.如果它是您自己的库,只需将.pc文件发送到/ usr/lib/pkgconfig,它将使其他开发人员更容易依赖/使用它.