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

最佳答案

AC_CHECK_HEADERS 实际上进行编译检查,而不是存在检查。因此,您必须为编译测试设置 C++ 支持,以便编译头文件(默认为 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++])

关于linux - Boost 和 Autoconf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3088069/

10-16 19:17