Ответ 1
То, что вы ищете, уже было сделано как AX_CXX_COMPILE_STDCXX_11
, часть autoconf-archive. Он добавит требуемую опцию в среду (ранее через CXXFLAGS
, теперь через CXX
) и ошибку, если поддержка С++ 11 не доступна.
Я использую AX_CXX_COMPILE_STDCXX_0X
(можно посмотреть в autoconf-архиве), чтобы проверить возможности С++ 11 компилятора. Он правильно определяет, что требуется -std=c++0x
, но не добавляет его в CXXFLAGS
. Я взглянул на источник макроса, и он проверяет, но затем восстанавливает предыдущие флаги.
Что мне делать, чтобы установить CXXFLAGS
возможность компилировать источник С++ 11?
Просто добавление -std=c++0x
в AM_CXXFLAGS
не является хорошим решением, потому что я хотел бы взять на себя ответственность за то, что компилятор компилируется в режиме С++ 11 у разработчиков autoconf, а не у меня.
То, что вы ищете, уже было сделано как AX_CXX_COMPILE_STDCXX_11
, часть autoconf-archive. Он добавит требуемую опцию в среду (ранее через CXXFLAGS
, теперь через CXX
) и ошибку, если поддержка С++ 11 не доступна.
В общем, вы можете скомпилировать простой код и установить переменную на основе результатов вашей компиляции
DIALECT="-std=c++14"
echo 'int main() {return 0;}' > ./log.cpp && $CXX -std=c++14 ./log.cpp || $DIALECT="no"
if test $DILAECT = no; then
AC_MSG_ERROR([c++ compiler does not support c++14])
else
echo $DILAECT
fi