【发布时间】:2016-02-14 22:39:06
【问题描述】:
我正在编译一个使用 CMake 的项目,它假定编译器是 G++,但我实际上使用的是 Visual Studio 2013。在CMakeLists.txt 文件中,我遇到了这一行
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -pedantic")
我想我应该用类似的东西替换
if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ????") # what goes here??
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -pedantic")
endif()
我对 Visual Studio 的世界还很陌生,所以虽然我知道 G++ 标志的含义,但我不知道它们的 Visual Studio 等价物。我认为:
-
-std=c++11告诉 G++ 使用 C++ 2011,我认为这是 Visual Studio 2013 中的默认设置,所以我认为我不需要为此设置标志。 -
-Wall好像大概对应/W4,而-Wextra大概对应/Wall?但是在 VS 上,/Wall包含/W4,所以/Wall本身就足够了吗? -
-pedantic检查是否严格符合 C++ 标准。不知道 VS 等价物可能是什么。
任何人都可以确认要使用的正确标志是 Visual Studio 吗?
【问题讨论】:
-
不幸的是,MSVC 似乎缺乏对系统包含路径的理解,因此启用
/Wall通常会在您的构建输出中包含数百个警告标准库/实现标头,因此我通常使用/W4来保留理智:)
标签: c++ visual-studio cmake g++