C++11 命令行警告D9002:忽略未知选项'-std=c++;11';

C++11 命令行警告D9002:忽略未知选项'-std=c++;11';,c++11,visual-studio-2013,cmake,compiler-warnings,C++11,Visual Studio 2013,Cmake,Compiler Warnings,在我的CMakeList.txt文件中,为了添加c++11支持,我有以下内容: 设置(CMAKE_CXX_标志“${CMAKE_CXX_标志}-std=c++11”) 这在Mac和Xcode环境下运行良好。但是,我从VisualStudio收到以下警告消息。有什么想法吗 命令行警告D9002:忽略未知选项'-std=c++0x' 除了compile警告之外,程序编译并运行时没有问题。我正在使用VS2013。如果我去掉那一行“设置标志”,警告就会消失 该选项仅用于GCC/CLang,在Visual

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

设置(CMAKE_CXX_标志“${CMAKE_CXX_标志}-std=c++11”)

这在Mac和Xcode环境下运行良好。但是,我从VisualStudio收到以下警告消息。有什么想法吗

命令行警告D9002:忽略未知选项'-std=c++0x'


除了compile警告之外,程序编译并运行时没有问题。我正在使用VS2013。如果我去掉那一行“设置标志”,警告就会消失

该选项仅用于GCC/CLang,在Visual Studio中不可用。默认情况下,VisualStudio中的C++ 11支持应该被打开。因此,您应该仅对类似GCC的编译器使用此选项:

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

如果您使用的是最新版本的CMake,您可能会尝试使用新的编译器功能机制:

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

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

使用TajiC++编译函数,使CMake为C++ 11添加正确的编译器标志,对于你使用的任何编译器

target_compile_features(mylibrary PRIVATE cxx_std_11)


那么/std:[c++14 | c++17 | c++最新版本]呢?“默认情况下应该打开。”我讨厌这个。永远不要在makefiles中使用默认值。请参见Karol Król的回答,并明确为MSVC设置标志。
set(CMAKE_CXX_STANDARD 11)