Visual Studio 中的 CMake 项目给出标志覆盖警告(命令行警告 D9025:用 '/w' 覆盖 '/W4')
CMake project in Visual Studio gives flag override warnings (Command line warning D9025: overriding '/W4' with '/w')
我有一个 CMake 项目,我正在使用 Microsoft Visual Studio 2019 构建它。我正在尝试修复和删除所有警告,但有一种类型我无法禁用或修复。
他们都是这样的类型:
Command line warning D9025: overriding '/W4' with '/w'
Command line warning D9025: overriding '/W3' with '/W4'
我尝试修复它们,但无法找出导致所有这些问题的原因。
我的问题是:
如何使用 CMake 禁用警告?或者是否有一种万无一失的方法来找到它们的根本原因并解决它们?
已提出此问题 (here and here),根据您的 CMake 版本,有几个解决方案。
使用 CMake 构建 MSVC 时,默认添加编译器警告标志(如 /W3
)。在 CMake 3.15 中,CMake 为此引入了一个 fix ,并且不再自动添加编译器警告标志,因此不应再出现该警告。来自文档:
CMake 3.15 and above prefer to leave out warning flags from the value of CMAKE_<LANG>_FLAGS
by default.
随着此修复,CMake 引入了策略 CMP0092,允许您在必要时切换回 OLD
行为(默认添加警告标志)。
如果您绑定的 CMake 版本早于 3.15,您可以手动操作 CMAKE_<LANG>_FLAGS
variable to replace the warnings yourself using CMake's regular expressions。你可以尝试这样的事情:
string(REGEX REPLACE "/W[3|4]" "/w" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
即使我使用的是 CMake 3.19,我也遇到了这个问题。这是由于在 cmake_minimum_required
命令之前有 project
命令造成的。
我有一个 CMake 项目,我正在使用 Microsoft Visual Studio 2019 构建它。我正在尝试修复和删除所有警告,但有一种类型我无法禁用或修复。
他们都是这样的类型:
Command line warning D9025: overriding '/W4' with '/w'
Command line warning D9025: overriding '/W3' with '/W4'
我尝试修复它们,但无法找出导致所有这些问题的原因。
我的问题是:
如何使用 CMake 禁用警告?或者是否有一种万无一失的方法来找到它们的根本原因并解决它们?
已提出此问题 (here and here),根据您的 CMake 版本,有几个解决方案。
使用 CMake 构建 MSVC 时,默认添加编译器警告标志(如 /W3
)。在 CMake 3.15 中,CMake 为此引入了一个 fix ,并且不再自动添加编译器警告标志,因此不应再出现该警告。来自文档:
CMake 3.15 and above prefer to leave out warning flags from the value of
CMAKE_<LANG>_FLAGS
by default.
随着此修复,CMake 引入了策略 CMP0092,允许您在必要时切换回 OLD
行为(默认添加警告标志)。
如果您绑定的 CMake 版本早于 3.15,您可以手动操作 CMAKE_<LANG>_FLAGS
variable to replace the warnings yourself using CMake's regular expressions。你可以尝试这样的事情:
string(REGEX REPLACE "/W[3|4]" "/w" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
即使我使用的是 CMake 3.19,我也遇到了这个问题。这是由于在 cmake_minimum_required
命令之前有 project
命令造成的。