【发布时间】:2012-06-14 14:44:22
【问题描述】:
有没有办法让 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)
【问题讨论】:
-
为什么使用
add_definitions命令而不是设置CMAKE_CXX_FLAGS来设置编译器选项?