假设我正在处理默认启用警告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
等。
答案 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?")