Я пишу программу, которая использует 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
более или менее говорит, что если вы должны использовать ее, что-то пошло не так, так что я сделал не так?
Работает для меня без ошибок с использованием autoconf 2.69. – ldav1s