命令行警告 D9002:忽略未知选项“-std=c++11”

Command line warning D9002: ignoring unknown option '-std=c++11'

在我的 CMakeList.txt 文件中,为了添加 c++11 支持,我有以下内容:

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

这在 Mac 和 Xcode 下工作正常。但是,我从 Visual Studio 收到以下警告消息。任何的想法?

Command line warning D9002: ignoring unknown option '-std=c++0x'

除了编译警告之外,程序编译和 运行 没有问题。我正在使用 VS2013。如果我删除那条 "set flag" 行,警告就会消失。

-std=c++11 选项仅适用于 GCC/CLang,在 Visual Studio 中不可用。 Visual Studio 中的 C++ 11 支持应该默认打开。所以,你应该只对类似 GCC 的编译器使用这个选项:

if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()

如果您使用的是最新版本的 CMake,您可以尝试使用新的编译器功能机制:http://www.cmake.org/cmake/help/v3.1/manual/cmake-compile-features.7.html

Microsoft Visual Studio 编译器 (MSVC) 拥有自己的 set of compiler flags。 简而言之:解决此问题的方法是使用以下命令而不是您使用的命令。

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17")

使用 target_compile_features 让 CMake 添加正确的编译器标志,适用于 C++ 11,适用于您使用的任何编译器

target_compile_features(mylibrary PRIVATE cxx_std_11)

set(CMAKE_CXX_STANDARD 11)