Я пытаюсь перенести систему сборки моего проекта на 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")'
Надеемся, что в будущих выпусках 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]))
Похоже, ошибка, которую вы получаете 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).