我正在尝试将我的项目的构建系统移植到GNU autotools。代码需要使用-std=c++11
或-std=c++0x
标志进行编译。我希望我的配置脚本检查编译器是否支持C ++ 11。我尝试将AX_CHECK_COMPILE_FLAG([-std=c++0x], [CXXFLAGS="$CXXFLAGS -std=c++0x"])
添加到configure.ac
文件,但configure
因此错误而失败:
...
./configure: line 2732: syntax error near unexpected token `-std=c++0x,'
./configure: line 2732: `AX_CHECK_COMPILE_FLAG(-std=c++0x, CXXFLAGS="$CXXFLAGS -std=c++0x")'
答案 0 :(得分:3)
希望在未来的autoconf版本中对C ++ 11有更全面的支持。同时,我在GNU autoconf archive中使用来自ax_cxx_compile_stdcxx_11.m4
的C ++ 11源代码测试:
AC_PROG_CXX
AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_SOURCE(
[[template <typename T>
struct check
{
static_assert(sizeof(int) <= sizeof(T), "not big enough");
};
typedef check<check<bool>> right_angle_brackets;
int a;
decltype(a) b;
typedef check<int> check_type;
check_type c;
check_type&& cr = static_cast<check_type&&>(c);]])],,
AC_MSG_FAILURE(['$CXX $CXXFLAGS' does not accept ISO C++11]))
答案 1 :(得分:1)
您收到的错误似乎来自AX_CHECK_COMPILE_FLAG
脚本中未展开的configure
。您可以通过在AX_CHECK_COMPILE_FLAG
中点击configure
来验证它是否已展开。如果grep在那里找到它,那么它就不会被扩展。
您也可以查看文件aclocal.m4
进行检查,其中aclocal
应该复制它的定义。
此宏的定义不包含在基本autoconf
包中,而是包含在autoconf
档案中。所以你可能错过了这个包。 (包的确切名称可能在发行版之间有所不同,在Gentoo中为sys-devel/autoconf-archive
,在Debian和Ubuntu中似乎是autoconf-archive
。