【问题标题】:Selectively disable C++ Core Guidelines Checker for third party libraries有选择地禁用第三方库的 C++ 核心指南检查器
【发布时间】:2018-01-28 19:42:30
【问题描述】:

我想尝试在 VS2015 下的 C++11/14 项目中使用 Core Guidelines checker tool

在我的代码中,我使用了许多来自 Boost 的库,它们会触发很多警告。我并不担心这些警告,因为 Boost 做了很多非常聪明的工作,而且编写这些库的目的并不是为了符合它们大多早于的指南。

但是由于大量警告,我无法在我的代码中找出真正的问题(至少根据该工具)。

有没有办法抑制第三方代码的所有警告?也许在#include boost headers之前和之后有一些属性?

我从 Visual C++ 团队博客中阅读了this page,但一直找不到。

【问题讨论】:

  • 您可以按类型禁止警告,对吗?逐个输入。
  • 但我不想为我的代码禁用这些警告,我只想为 Boost 禁止它们...

标签: c++ visual-studio c++11 boost code-analysis


【解决方案1】:

有一个未记录的环境变量 CAExcludePath,用于过滤来自该路径中文件的警告。我通常将 %CAExcludePath% 设置为 %Include% 运行。

您也可以从 MSBuild 中使用它,请参见此处的示例(成功与否):Suppress warnings for external headers in VS2017 Code Analysis

MSVC 正在研究类似于 GCC 的系统标头的东西,它应该是解决此问题的更全面的解决方案。

【讨论】:

    【解决方案2】:

    目前,在 VS 中,抑制来自第三方库的警告的功能仍处于试验阶段,但肯定会推出。

    VS 2017 版本 15.6 Preview 1 具有抑制来自第三方库的警告的功能。在下面的文章中,他们使用“外部头文件”这个术语来指代来自第三方库的头文件。

    https://blogs.msdn.microsoft.com/vcblog/2017/12/13/broken-warnings-theory/

    上面的文章基本上是这么说的

    • 指定外部标头
    • 指定外部标头的警告级别

    抑制来自他们的警告。例如,如果我们在some_lib_dir 目录中有外部头文件,并且想要编译依赖于外部头文件的my_prog.cpp 中的代码,那么下面的命令应该可以完成这项工作。

    cl.exe /experimental:external /external:I some_lib_dir /external:W0 /W4 my_prog.cpp

    请注意,/experimental:external 是必需的,因为这仍是一项实验性功能,此功能的详细信息可能会在未来发生变化。

    无论如何,我们需要等待 Visual Studio 的未来版本。

    【讨论】:

      猜你喜欢
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2021-02-17
      • 2014-11-25
      • 2017-05-15
      • 2017-10-10
      相关资源
      最近更新 更多