当我试图运行一个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特性。


当前回答

最简单的方法:

add_compile_options(化= c + + 11)

其他回答

以防你在使用cmake时遇到和我一样的错误。 你需要设置

set (CMAKE_CXX_STANDARD 11)

激活线程,因为它只支持c++ 11++

希望这能有所帮助

现代的方法是通过以下方式指定c++ 11所需的最低标准:

target_compile_features(foo PUBLIC cxx_std_11)

这种方式:

CMake can honor default C++ standard of the compiler if it's greater than C++11 You can clearly specify whether C++ standard is required at build time, consume time, or both. This is nice for libraries. Public compile features are propagated to downstream targets, so it comes for free in those targets even if they don't directly use this feature. Users can externally set another C++ standard (more recent basically), with CMAKE_CXX_STANDARD, either from command line or CMake presets. If you hardcode CMAKE_CXX_STANDARD in a CMakeLists, nobody can override the C++ standard without editing your CMakeLists, which is not very pleasant.

它需要CMake >= 3.8

OS X和Homebrew LLVM相关:

不要忘记在它之后调用cmake_minimum_required(VERSION 3.3)和project() !

或者CMake将隐式地在第1行之前插入project(),导致Clang版本检测出现问题,并可能出现其他类型的问题。这是一个相关的问题。

设置Cxx标准最简单的方法是:

 set_property(TARGET tgt PROPERTY CXX_STANDARD 11)

有关更多细节,请参阅CMake文档。

我想这两行就够了。

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")