2010-06-21 11 views
10

Estoy haciendo un proyecto que usa Autoconf. Tengo el siguiente en configure.ac:Boost y Autoconf

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

Cuando corro configure, que dice que no puede encontrar el archivo de cabecera:

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. 

Esto es extraño, porque tengo Boost. Si quito el cheque, el código se compila, y tengo instalado Boost:

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

Tenga en cuenta que lo hice exactamente lo mismo con SDL, y funciona.

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

Puede estar interesado en http://github.com/tsuna/boost.m4, que es un conjunto adicional de macros Autoconf para verificar encabezados y bibliotecas de Boost, así como la versión mínima de Boost. – ZoogieZork

+0

Comprueba config.log para ver exactamente por qué falló. academicRobot es probablemente correcto que está intentando compilar con un compilador de C. –

+0

boost.m4 funcionó a la perfección para mí. Pude construir contra varias versiones de boost con él sin ningún problema (así como en múltiples sistemas operativos). – squeegee

Respuesta

13

AC_CHECK_HEADERS realmente hace una comprobación de una compilación, no una comprobación de la existencia. Así que hay que establecer el apoyo de C++ para las pruebas de compilación con el fin de impulsar las cabeceras para compilar (por defecto es 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++]) 
8

No es realmente un answer-- tratar boost.m4 si desea usar Boost con autoconf.

7

También hay una colección de macros de Boost autoconf en el GNU Autoconf Archive. Probablemente necesitará al menos AX_BOOST_BASE. También existen otras macros para las otras bibliotecas de Boost.