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

时间:2015-04-06 15:00:47

标签: c++11 visual-studio-2013 cmake compiler-warnings

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

  

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

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

  

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

除编译警告外,程序编译运行没有问题。我正在使用VS2013。如果我删除那个单词" set flag"线,警告消失了。

3 个答案:

答案 0 :(得分:8)

-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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

对于C ++ 11,使用target_compile_features来使CMake添加正确的编译器标志,无论您使用的是哪个编译器

target_compile_features(mylibrary PRIVATE cxx_std_11)

set(CMAKE_CXX_STANDARD 11)