2013-05-18 1 views
1

Я пишу программу, которая использует boost::asio для доступа к последовательным портам. Согласно документации, поддержка последовательного порта доступна, когда определяется макрос BOOST_ASIO_HAS_SERIAL_PORT. Поскольку это требование, я хочу, чтобы мой скрипт configure прерывался, если макрос не был определен.autoconf: как проверить наличие #define

Я думал, что я мог бы добиться этого с чем-то вроде следующего:

AC_MSG_CHECKING([for serial port support in boost::asio]) 
AC_EGREP_CPP(yes_have_boost_asio_serial, [ 
#include <boost/asio.hpp> 
#ifdef BOOST_ASIO_HAS_SERIAL_PORT 
yes_have_boost_asio_serial 
#endif 
], [ 
    AC_MSG_RESULT([yes]) 
], [ 
    AC_MSG_RESULT([no]) 
    AC_ERROR([boost::asio must be compiled with serial port support enabled]) 
]) 

К сожалению, когда я ставлю это, я получаю странные ошибки при генерации скрипта конфигурации:

configure.ac:23: error: possibly undefined macro: BOOST_ASIO_HAS_SERIAL_PORT 
     If this token and others are legitimate, please use m4_pattern_allow. 
     See the Autoconf documentation. 

Почему autoconf видит макросы внутри моего кода? Документация на m4_pattern_allow более или менее говорит, что если вы должны использовать ее, что-то пошло не так, так что я сделал не так?

+0

Работает для меня без ошибок с использованием autoconf 2.69. – ldav1s

ответ

2

Я закончил с использованием только m4_pattern_allow, я думаю, что это имеет какое-то отношение к символу с верхним регистром, похожим на то, что должен иметь дело с autoconf?

m4_pattern_allow([BOOST_ASIO_HAS_SERIAL_PORT]) 

AC_MSG_CHECKING([for serial port support in boost::asio]) 
...