2010-06-21 10 views
10

Sto creando un progetto che utilizza Autoconf. Ho il seguente in configure.ac:Boost e Autoconf

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

Quando eseguo configure, si dice che non riesce a trovare questo file di intestazione:

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. 

Questo è strano, perché ho Boost. Se rimuovo l'assegno, compila il codice, e ho installato Boost:

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

Nota che ho fatto esattamente lo stesso con SDL, e funziona.

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

Potresti essere interessato a http://github.com/tsuna/boost.m4, che è un set di macro Autoconf per il controllo di intestazioni e librerie Boost, oltre alla versione minima di Boost. – ZoogieZork

+0

Controllare config.log per vedere esattamente perché non è riuscito. academicRobot è probabilmente corretto che sta cercando di compilare con un compilatore C. –

+0

boost.m4 ha funzionato perfettamente per me. Sono stato in grado di costruire contro diverse versioni di boost con esso senza problemi (così come su più sistemi operativi). – squeegee

risposta

13

AC_CHECK_HEADERS in realtà fa un un assegno di compilazione, non un controllo di esistenza. Quindi, è necessario impostare il supporto C++ per le prove di compilazione in modo che le intestazioni Boost per la compilazione (di default è 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

Non proprio un answer-- provare boost.m4 se si desidera utilizzare Boost con autoconf.

7

C'è anche una raccolta di macro di autoconf Boost su GNU Autoconf Archive. Probabilmente avrai bisogno di almeno AX_BOOST_BASE. Ci sono anche altre macro per le altre librerie di Boost.