问题描述
我正在研究一个使用OpenCV和Boost的C ++项目。不幸的是,在编译时,我的编译器从那些库的包含文件中给我数百警告。即使主函数为空且没有其他代码,我仍然可以从include语句中获得这些警告。我听说这是Qt等其他第三方库的问题。所有优秀的图书馆。如何在MSVC中禁止所有第三方警告。
我知道这些解决方案:
- 在海湾合作委员会: #pragma GCC system_header #include“ real_3rd_party_header.h”
- 还有GCC -isystem选项,可用于指定目录 压制 How to eliminate external lib/third party warnings in GCC 我希望MSVC像这样。
- MSVC中的#pragma push pop宏,但这仅适用于您的 自己的代码。 https://docs.microsoft.com/en-us/cpp/preprocessor/warning?view=vs-2019
- 还有新的VS2017解决方案 https://devblogs.microsoft.com/cppblog/broken-warnings-theory/
我在最后两个解决方案上花费了数小时,但没有成功。无论如何,“警告预警理论”博客没有解释如何很好地应用其解决方案。
我正在使用:
- Visual Studio 2015和2019。
- 提升1.72
- OpenCV4
我非常感谢任何愿意与我一起解决此问题的人。很高兴知道谁甚至解决了这个问题。这么多公司使用这些库,有些可能与MSVC一起使用。他们没有办法只保留那里的警告而忘记它们。我正要付钱解决这个问题。使此功能生效可能是重用第三方库和自己重写代码之间的决定因素。
解决方法
所有这些都来自此博客文章:https://devblogs.microsoft.com/cppblog/broken-warnings-theory/。 本文引言的一般语调充分说明了为什么不首先使用此选项(对我来说,这都没有多大意义)。
基本上,这表示您可以将/external:I
用作-isystem
的同义词。
由于MSVC处理模板警告的方式,您可能还需要/external:templates-
。
很遗憾,我在the MSVC commandline documentation和the release notes related to the mentioned VS2017 15.6中都找不到任何引用,因此您的里程可能会有所不同。
不过,a CMake issue在其SYSTEM
修饰符后面要求支持此功能。