如何禁用视觉工作室中父母继承的特定警告

How to disable specific warning inherited from parent in Visual Studio?

本文关键字:警告 继承 父母 何禁用 视觉 工作室      更新时间:2023-10-16

假设我在默认情况下启用了w44101的大型代码库。这意味着如果我进入我的项目并右键单击属性 -> c/c ->命令行 -> /w44101在其他选项部分中显示。

我希望通过更改配置而不是源代码来禁用此警告。我尝试进入属性 -> c/c ->所有选项 ->禁用特定警告并放入4101,这实际上在属性中产生了/wd"4101" -> c/c ->命令行。但是,当我编译项目时,它仍然会引发4101警告。/wd"4101"/w44101为什么不相互取消?

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

编辑:默认情况下,我正在使用的代码库具有严格的编译标志设置。它使用/W4/WX编译。另外,其他4级警告为例如/w44101/w44062/w44191等。

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

编辑:

您在问题的评论中回答了这一点。读取MSDN文档,/wlnnnn选项允许将警告级别设置为l的警告号码,以确定nnnn指定的警告号码。因此,/w44101在级别4启用警告号码4101


无论如何,如果您的项目是用CMAKE生成的,则可以使用add_compile_options将选项添加到当前目录中源文件的汇编中。这可用于在警告级别4:

上在"全局范围"上启用警告4101
add_compile_options(/w44101)

然后,您可以使用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")

您应该做的是从CMAKE_CXX_FLAGS中删除/w44101。您可以使用string(REPLACE ...)用空字符串替换/w44101

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

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

(请参阅相关问题:"我如何最好地沉默未使用变量的警告?")

我搜索了" cmake disable Visual Studio警告",这使我在这里。这并不是OP问的问题,但这是否是最受欢迎的问题...

add_compile_options(/wd<warningNumber>)对我不起作用(CMAKE版本3.21.3)。实际上,add_compile_options甚至在记事本 中都没有语法高显示。相反,我从2008年开始找到此页面。它建议使用add_definitions,这确实对我有用:

...
if(WIN32)
  add_definitions("/wd4251")
endif(WIN32)

我通常不会主张忽略警告,但是在这种特殊情况下,我正在反对几个第三方和供应商DLL,据我所知,警告4251不一定表明问题。这只是在说:"您所要求的所有这些功能都需要具有DLL接口(我已经知道),因此请确保您正在正确执行此操作。此警告淹没了输出,因此很难发现其他更重要的警告,因此我决定禁用它。