当我试图运行一个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特性。
对于CMake 3.8和更新版本,您可以使用
target_compile_features(target PUBLIC cxx_std_11)
如果您希望在工具链不能遵循此标准的情况下生成步骤失败,则可以将此设置为必需的。
set_target_properties(target PROPERTIES CXX_STANDARD_REQUIRED ON)
如果你想严格遵守标准c++,即避免你的编译器提供的c++扩展(如GCC的-std=gnu++17),另外设置
set_target_properties(target PROPERTIES CXX_EXTENSIONS OFF)
这是在现代CMake介绍->添加功能-> c++ 11和超越详细文档。它还提供了关于如何在旧版本的CMake上实现这一点的建议,如果你受到限制的话。