【问题标题】:CMake project in Visual Studio gives flag override warnings (Command line warning D9025: overriding '/W4' with '/w')Visual Studio 中的 CMake 项目给出标志覆盖警告(命令行警告 D9025:用 '/w' 覆盖 '/W4')
【发布时间】:2020-03-01 16:12:25
【问题描述】:

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

它们都属于以下类型:

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

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

我的问题是:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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


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

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

    【讨论】:

    • 即使在 Visual Studio 2019 Pro 版上使用 CMake 3.19.2,我也遇到了这个问题。
    • 这可能是因为您要求的最低 CMake 版本低于 3.15,您需要在项目中至少使用 3.15:cmake_minimum_required(VERSION 3.15)
    • 是否需要在 CMAKElist.txt "CMAKE__FLAGS" 中明确定义这个标志
    • 我尝试使用 /external:W0 标志抑制来自外部库的警告,但我遇到了类似的问题:“使用 /external:W0 覆盖 /external:W3”。我的 cmake_minimum_required 是 3.18。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      相关资源
      最近更新 更多