假设我正在处理一个大型代码库,该代码库默认情况下启用了w44101警告。这意味着如果我进入我的项目并右键单击属性-> C/C++->命令行-> /w44101,将显示在附加选项部分。

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

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

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

最佳答案

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

编辑:

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

无论如何,如果您的项目是使用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")

您应该做的是从/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?")

关于c++ - 如何禁用Visual Studio中从父级继承的特定警告?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41205725/

10-13 06:49
查看更多