13

我正在制作一个使用 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
4

3 回答 3

17

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

AC_LANG_PUSH([C++])
AC_CHECK_HEADERS([boost/foreach.hpp], [],
    [AC_MSG_ERROR(You need the Boost libraries.)])
AC_LANG_POP([C++])
于 2010-06-21T20:26:10.120 回答
9

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

于 2010-06-22T06:13:04.283 回答
9

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

于 2010-08-20T00:30:15.423 回答