有没有办法让 CMake 自动检测编译器是否支持 C + + 11?
因为在 CMake 运行期间,最好通知用户代码将不会编译,因为编译器不支持 C + + 11。现在我设置了 C + + 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)