当我试图运行一个CMake生成的makefile来编译我的程序时,我得到的错误是
c++ 98模式不支持基于范围的for循环。
我尝试添加add_definitions(-std=c++0x)到我的CMakeLists.txt,但它没有帮助。
我也试过这个:
if(CMAKE_COMPILER_IS_GNUCXX)
add_definitions(-std=gnu++0x)
endif()
当我执行g++——version时,我得到:
g+ (Ubuntu/Linaro 4.6.1- 9u阑尾3)4.6.1
我还尝试了SET(CMAKE_CXX_FLAGS "-std=c++0x"),这也不起作用。
我不明白如何使用CMake激活c++ 11特性。
如果你想总是激活最新的c++标准,这里是我对David Grayson的答案的扩展,根据最近(CMake 3.8和CMake 3.11)为CMAKE_CXX_STANDARD增加了17和20的值:
IF (CMAKE_VERSION VERSION_LESS "3.8")
SET(CMAKE_CXX_STANDARD 14)
ELSEIF (CMAKE_VERSION VERSION_LESS "3.11")
SET(CMAKE_CXX_STANDARD 17)
ELSE()
SET(CMAKE_CXX_STANDARD 20)
ENDIF()
# Typically, you'll also want to turn off compiler-specific extensions:
SET(CMAKE_CXX_EXTENSIONS OFF)
(在链接答案中的set (CMAKE_CXX_STANDARD 11)中使用该代码。)