首页 > 解决方案 > Visual Studio 中的 CMake 项目给出标志覆盖警告(命令行警告 D9025:用 '/w' 覆盖 '/W4')

问题描述

我有一个 CMake 项目,我正在使用 Microsoft Visual Studio 2019 构建它。我正在尝试修复并删除所有警告,但有一种类型我无法禁用或修复。

它们都属于以下类型:

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

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

我的问题是:

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

标签: visual-c++cmakecompiler-warningsvisual-studio-2019

解决方案


此问题已被提出(此处此处),根据您的 CMake 版本,有几个解决方案。

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

默认情况下,CMake 3.15 及更高版本更喜欢从值中省略警告标志CMAKE_<LANG>_FLAGS

随着这个修复,CMake 引入了策略CMP0092,它允许您在必要时切换回OLD行为(默认添加警告标志)。


如果您绑定到早于 3.15 的 CMake 版本,则可以手动操作变量以使用 CMake 的正则表达式CMAKE_<LANG>_FLAGS自己替换警告。你可以尝试这样的事情:

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

推荐阅读