Visual Studio中的CMake项目提供标志覆盖警告(命令行警告D9025:用'/ w'覆盖'/ W4')

时间:2019-11-05 09:56:12

标签: visual-c++ cmake compiler-warnings visual-studio-2019

我有一个使用Microsoft Visual Studio 2019构建的CMake项目。我试图修复和删除所有警告,但是有一种类型我无法禁用或修复。

所有类型均为

Command line warning D9025: overriding '/W4' with '/w'
Command line warning D9025: overriding '/W3' with '/W4'

我试图修复它们,但我无法找出导致所有这些问题的原因。

我的问题是:

如何使用CMake禁用警告?还是有一种万无一失的方法来找到它们的根本原因并加以修复?

2 个答案:

答案 0 :(得分:3)

即使我使用的是 CMake 3.19,我也遇到了这个问题。这是因为在 project 命令之前有 cmake_minimum_required 命令。

答案 1 :(得分:1)

已经提出了这个问题(herehere),根据您的CMake版本,有几种解决方案。

在使用CMake构建MSVC时,默认情况下会添加编译器警告标志(如/W3)。在CMake 3.15中,CMake为此引入了fix,并且不再自动添加编译器警告标志,因此该警告不再出现。从文档中:

  

CMake 3.15及更高版本更喜欢默认情况下从CMAKE_<LANG>_FLAGS的值中删除警告标志。

与此修复程序一起,CMake引入了策略CMP0092,该策略可让您在必要时切换回OLD行为(默认情况下添加警告标志)。


如果您绑定到3.15之前的CMake版本,则可以使用CMake的CMAKE_<LANG>_FLAGS手动操作regular expressions变量来替换警告。您可以尝试这样的事情:

string(REGEX REPLACE "/W[3|4]" "/w" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")