我正在编写一个使用boost::asio
访问串行端口的程序。根据文档,定义BOOST_ASIO_HAS_SERIAL_PORT
宏时可以使用串行端口支持。由于这是一项要求,如果尚未定义宏,我希望我的配置脚本能够中止。
我认为我可以通过以下方式实现这一目标:
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 :(得分:2)
我最后只使用m4_pattern_allow
,我想它与全大写符号有关,看起来像是autoconf应该处理的东西?
m4_pattern_allow([BOOST_ASIO_HAS_SERIAL_PORT])
AC_MSG_CHECKING([for serial port support in boost::asio])
...