叮当:将特定警告标记为非错误

Clang: mark a specific warning as non error

本文关键字:记为 错误 警告 叮当      更新时间:2023-10-16

我正在尝试将所有警告标记为错误以防止新警告蔓延,但我想保持现有代码库正常工作,因此我将其中一些标记为非错误-Wno-error=foo。问题是一些警告仍然被报告为错误而不是警告,即使它们已被标记为无错误:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -Xclang -include-pch -Xclang Pch/UI-ProjectScreen/c++.pch -pipe -stdlib=libc++ -Wall -Wextra -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wheader-hygiene -Wmissing-declarations -Wunreachable-code -Wuninitialized -Woverloaded-virtual -Werror -Wno-error=deprecated-declarations -Wno-error=logical-op-parentheses -Wno-error=missing-field-initializers -Wno-error=non-virtual-dtor -Wno-error=pedantic -Wno-error=reorder -Wno-error=return-stack-address -Wno-error=sign-compare -Wno-error=switch -Wno-error=unreachable-code -Wno-error=unused-const-variable -Wno-error=unused-parameter -Wno-error=unused-private-field -Wno-error=unused-variable -Wno-error=#warnings -Wno-deprecated-register -Wno-extra-semi -Wno-backslash-newline-escape -Wno-missing-braces -isystem /Developer/Boost/1.57.0-Clang/include -isystem /Developer/Qt5.6.1-clang/5.6/clang_64/include -g -fPIC -std=gnu++1y -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -mmacosx-version-min=10.8 -W -D_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_XML_LIB -DQT_XMLPATTERNS_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I../../../../Modules/UI/ProjectScreen -I. -I/Developer/Boost/1.57.0-Clang/include -I../../../../ThirdParties/Glew/1.13.0/include -I../../../../ThirdParties/TBB/include -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtWidgets.framework/Headers -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtGui.framework/Headers -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtXml.framework/Headers -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtXmlPatterns.framework/Headers -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtNetwork.framework/Headers -I/Developer/Qt5.6.1-clang/5.6/clang_64/lib/QtCore.framework/Headers -IMoc -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -IUi -I/Developer/Qt5.6.1-clang/5.6/clang_64/mkspecs/macx-clang -F/Developer/Qt5.6.1-clang/5.6/clang_64/lib -o Obj/ProjectScreenWidget.o ../../../../Modules/UI/ProjectScreen/ProjectScreenWidget.cpp
../../../../Modules/UI/ProjectScreen/ProjectScreenWidget.cpp:597:9: error: missing field 'duration' initializer [-Werror,-Wmissing-field-initializers]
        }; 
        ^
1 error generated.
make: *** [Obj/ProjectScreenWidget.o] Error 1
12:09:36: The process "/usr/bin/make" exited with code 2.

如您所见,我传递-Werror-Wno-error=missing-field-initializers那么为什么编译在missing-field-initializers上出错?我当然可以修复警告,但我想先了解发生了什么。

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ --version
Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

我在这里错过了一些明显的东西吗?

编辑:我刚刚尝试了 http://gcc.godbolt.org/#,它似乎按预期运行,我无法在那里重现相同的问题......

我终于发现了问题:我正在使用qmake来生成makefile,并且它在我的设置后自动添加-W,这实际上忽略了我之前设置的所有警告选项。

所以我更改了QMAKE_CXXFLAGS_WARN_ON变量以删除该-W选项并修复了它。

QMAKE_CFLAGS_WARN_ON -= -Wall -W
QMAKE_CXXFLAGS_WARN_ON -= -Wall -W

我也可以编辑 makespec 文件,但我认为这个解决方案更干净,更能抵抗用户错误(即在(重新)安装 Qt 等时)。