我有一个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
命令引起的。