这些 G++ 标志的 Visual Studio 等效项?
Posted
技术标签:
【中文标题】这些 G++ 标志的 Visual Studio 等效项?【英文标题】:Visual Studio equivalent for these G++ flags? 【发布时间】: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
来保留理智:)
【参考方案1】:
我使用的是 Visual Studio 2015,但我预计这些标志不会有任何重大差异:
C++11 是标准的,但您应该检查Support for C++11/14/17-page 以确保并可能升级到 VS2015-compiler。 Visual Studio 有一个“警告级别”,您可以在其中选择 /W0-/W4 和 /Wall。因此,使用 Visual Studio 本身,您不能同时指定 /W4 和 /Wall,这使我得出结论 /Wall 就足够了。 我能找到的最接近“迂腐”的东西是我会将其翻译(抱歉,这里是德语 VS)为“停用语言扩展”,并且是选项 /Za【讨论】:
请注意,STL 建议不要使用/Za
here: /Za is C1XX’s option to enable extra conformance, but it also enables extra compiler bugs in rarely-used codepaths, so we discourage its use.
@melak47 关于/Za
的良好警告。就我而言,它最终破坏了 Windows SDK 标头,所以对我来说绝对不行。以上是关于这些 G++ 标志的 Visual Studio 等效项?的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2010 Professional 中的 /analyze 标志
面向 XP 的 Visual Studio 2013 的 Visual C++ 编译器标志