Есть ли способ позволить 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)