假设我在默认情况下启用了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接口(我已经知道),因此请确保您正在正确执行此操作。此警告淹没了输出,因此很难发现其他更重要的警告,因此我决定禁用它。