假设我正在处理一个大型代码库,该代码库默认情况下启用了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
的警告级别。因此,/w44101
在4101
级别启用警告编号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/