Как определить поддержку C++11 компилятора с помощью CMake

Есть ли способ позволить CMake автоматически определять, поддерживает ли компилятор C++11 или нет?

Было бы неплохо сообщить пользователям во время запуска CMake, что код не будет компилироваться, так как компилятор не поддерживает C++11. На данный момент я устанавливаю флаги С++ 11. Однако, если компилятор не поддерживает это, пользователь получает ошибки компиляции вместо ошибки во время запуска CMake.

Идеальным было бы что-то, что работает как find_package().Однако я не нашел ни одного модуля или функции, обеспечивающей необходимую функциональность.

Кроме того, было бы неплохо иметь возможность определять, нужны ли компилятору флаги std=c++0xили std=c++11.

Есть что-то доступное или мне нужно разработать это самостоятельно?

Ниже приведен код, который я использую до сих пор, однако он работает только с компиляторами GNU'c GCC. Было бы неплохо, если бы было более общее решение.

if(CMAKE_COMPILER_IS_GNUCXX)
   execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
   if (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7)
        message(STATUS "C++11 activated.")
        add_definitions("-std=gnu++11")
   elseif(GCC_VERSION VERSION_GREATER 4.3 OR GCC_VERSION VERSION_EQUAL 4.3)
        message(WARNING "C++0x activated. If you get any errors update to a compiler which fully supports C++11")
        add_definitions("-std=gnu++0x")
   else ()
        message(FATAL_ERROR "C++11 needed. Therefore a gcc compiler with a version higher than 4.3 is needed.")   
   endif()
else(CMAKE_COMPILER_IS_GNUCXX)
   add_definitions("-std=c++0x") 
endif(CMAKE_COMPILER_IS_GNUCXX)
71
задан Peter Mortensen 31 August 2018 в 14:56
поделиться