Boost и Autoconf - PullRequest
       14

Boost и Autoconf

11 голосов
/ 21 июня 2010

Я делаю проект, который использует 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

Ответы [ 3 ]

16 голосов
/ 22 июня 2010

AC_CHECK_HEADERS фактически выполняет проверку компиляции, а не проверку существования.Таким образом, вы должны установить поддержку C ++ для тестов компиляции, чтобы заголовки повышения компилировались (по умолчанию C, документы здесь ):

AC_LANG_PUSH([C++])
AC_CHECK_HEADERS([boost/foreach.hpp], [],
    [AC_MSG_ERROR(You need the Boost libraries.)])
AC_LANG_POP([C++])
9 голосов
/ 22 июня 2010

Вас может заинтересовать github.com / tsuna / boost.m4 , который представляет собой набор макросов Autoconf для проверки заголовков и библиотек Boost, а также минимальной версии Boost.

7 голосов
/ 20 августа 2010

Существует также коллекция макросов Boost autoconf в GNU Autoconf Archive . Вам, вероятно, понадобится как минимум AX_BOOST_BASE . Есть и другие макросы для других Boost-библиотек.

...