Поддержка C ++ 11 в GNU automake

Я пытаюсь перенести систему сборки моего проекта на 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")'

2

Решение

Надеемся, что в будущих выпусках autoconf будет более всесторонняя поддержка C ++ 11. В то же время я использую исходный тест C ++ 11 из ax_cxx_compile_stdcxx_11.m4 в GNU autoconf архив:

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]))
3

Другие решения

Похоже, ошибка, которую вы получаете AX_CHECK_COMPILE_FLAG не расширяется в вашем configure скрипт. Вы можете проверить, расширена ли она, используя grepping AX_CHECK_COMPILE_FLAG в configure, Если grep находит его там, то он не расширяется.

Вы также можете проверить это, посмотрев в файл aclocal.m4, где aclocal следует скопировать это определение.

Определение этого макроса не входит в основной autoconf пакет, но в autoconf архивы. Таким образом, вы, вероятно, пропустите этот пакет. (Точное имя пакета может отличаться в разных дистрибутивах, оно sys-devel/autoconf-archive в Gentoo и похоже autoconf-archive в Debian и Ubuntu).

1