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禁用警告?或者有没有一种万无一失的方法来找到它们的根本原因并加以解决?

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

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

默认情况下,CMake 3.15及以上版本更喜欢在CMAKE_<LANG>_FLAGS的值中省略警告标志。

除了此修复程序外,CMake还引入了策略CMP0092,该策略允许您在必要时切换回OLD行为(默认情况下添加警告标志(。


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

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

尽管我使用的是CMake 3.19,但我还是遇到了这个问题。它是由于在cmake_minimum_required命令之前有project命令引起的。

最新更新