【问题标题】:Boost and AutoconfBoost 和 Autoconf
【发布时间】:2010-06-21 19:58:50
【问题描述】:

我正在制作一个使用 Autoconf 的项目。我在configure.ac 中有以下内容:

AC_CHECK_HEADERS([boost/foreach.hpp], [],
    [AC_MSG_ERROR(You need the Boost libraries.)])

当我运行configure 时,它说找不到这个头文件:

checking boost/foreach.hpp usability... no
checking boost/foreach.hpp presence... no
checking for boost/foreach.hpp... no
configure: error: You need the Boost libraries.

这很奇怪,因为我有 Boost。如果我删除检查,代码编译,我安装了 Boost:

$ find /usr/include -name foreach.hpp
/usr/include/boost/foreach.hpp
/usr/include/boost/test/utils/foreach.hpp

请注意,我对 SDL 做了同样的事情,而且它有效。

AC_CHECK_HEADERS([SDL/SDL.h], [],
    [AC_MSG_ERROR(You need the SDL development library.)])

...

checking SDL/SDL.h usability... yes
checking SDL/SDL.h presence... yes
checking for SDL/SDL.h... yes

【问题讨论】:

  • 检查 config.log 以了解失败的确切原因。 AcademicRobot 可能是正确的,它正在尝试使用 C 编译器进行编译。

标签: linux boost autoconf


【解决方案1】:

AC_CHECK_HEADERS 实际上是进行编译检查,而不是存在检查。因此,您必须为编译测试设置 C++ 支持才能编译 boost 标头(默认为 C,docs here):

AC_LANG_PUSH([C++])
AC_CHECK_HEADERS([boost/foreach.hpp], [],
    [AC_MSG_ERROR(You need the Boost libraries.)])
AC_LANG_POP([C++])

【讨论】:

    【解决方案2】:

    GNU Autoconf Archive 上还有一组 Boost autoconf 宏。您可能至少需要AX_BOOST_BASE。其他 Boost 库的其他宏也在那里。

    【讨论】:

      【解决方案3】:

      您可能对github.com/tsuna/boost.m4 感兴趣,它是一组 Autoconf 宏,用于检查 Boost 标头和库以及最低 Boost 版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 2011-10-25
        • 2015-03-27
        相关资源
        最近更新 更多