如何在Visual Studio中禁用从父级继承的特定警告?

时间:2016-12-18 05:22:51

标签: c++ visual-studio cmake compiler-warnings suppress-warnings

假设我正在处理默认启用警告w44101的大型代码库。这意味着如果我进入我的项目并右键单击属性 - > C / C ++ - >命令行 - > /w44101会显示在其他选项部分中。

我希望能够通过更改配置而不是源代码来禁用此警告。我尝试进入属性 - > C / C ++ - >所有选项 - >禁用特定警告并输入4101,这实际上会在属性中生成/wd"4101" - > C / C ++ - >命令行。但是,当我编译我的项目时,它仍会抛出4101警告。为什么/wd"4101"/w44101相互抵消?

我在使用Visual Studio 2015的Windows 10上。禁用此警告的正确方法是什么?如果可以在CMake中使用某种类型的函数调用所提出的解决方案,因为此代码库的.sln文件是由CMake生成的。

编辑:我正在处理的这个代码库默认设置了严格的编译标志。它使用/W4/WX进行编译。另外还有4级警告,仅举几例,/w44101/w44062/w44191等。

1 个答案:

答案 0 :(得分:11)

在您的问题中,您启用了警告44101(如果我是对的则不存在?),但禁用警告4101:这是一个错字吗?

修改

您在问题的评论中回答了这个问题。阅读MSDN documentation/wlnnnn选项可以将l的警告级别设置为nnnn指定的警告编号。因此,/w44101会在4101级启用警告编号4

无论如何,如果你的项目是用CMake生成的,add_compile_options可以用来为当前目录中的源文件编译添加选项。这可用于在“全局范围”中启用警告4101

add_compile_options(/w4101)

然后,您可以使用target_compile_definitions为每个目标禁用它:

add_library(foo ...)
target_compile_definitions(foo PUBLIC /wd4101)

修改

根据您的评论,在回购的头部CMake文件中有:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /w44101")

在您尝试的项目CMake文件中:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4101")

您应该从/w44101移除CMAKE_CXX_FLAGS。您可以使用string(REPLACE ...)/w44101替换为空字符串来实现此目的:

string(REPLACE "/w44101" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")

显然,最好的解决方案是修复生成警告的代码。 4101是关于未使用的变量,这很容易修复;)

(参见相关问题"How do I best silence a warning about unused variables?"