当我尝试运行CMake生成的makefile来编译我的程序时,我得到了错误
C++ 98模式不支持基于范围的循环.
我尝试添加add_definitions(-std=c++0x)到我的CMakeLists.txt,但它没有帮助.我也试过这个:
if(CMAKE_COMPILER_IS_GNUCXX)
add_definitions(-std=gnu++0x)
endif()
Run Code Online (Sandbox Code Playgroud)
当我这样做时g++ --version,我得到:
g ++(Ubuntu/Linaro 4.6.1-9ubuntu3)4.6.1
我也试过SET(CMAKE_CXX_FLAGS "-std=c++0x"),这也行不通.
我不明白如何使用CMake激活C++ 11功能.
如果编译器支持C++ 11,有没有办法让CMake自动检测?
因为在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)
Run Code Online (Sandbox Code Playgroud)