Есть ли способ позволить CMake автоматически определять, поддерживает ли компилятор С++ 11 или нет?
Как было бы неплохо сообщить пользователям во время запуска CMake, что код не будет компилироваться, так как компилятор не поддерживает С++ 11. На данный момент я установил флаги С++ 11. Однако, если компилятор не поддерживает его, пользователь получает ошибки компиляции вместо ошибки во время запуска CMake.
Идеальным было бы то, что работает как find_package()
. Однако я не нашел ни одного модуля или функции, которые бы обеспечивали необходимую функциональность.
Дополнительно было бы неплохо иметь возможность определять, нужны ли компилятору флаги std=c++0x
или std=c++11
.
Есть ли что-то доступное или мне нужно разработать это самостоятельно?
Ниже приведен код, который я использую до сих пор, однако он работает только с компиляторами GCC GNU'c. Было бы неплохо, если бы было более общее решение.
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)