这篇文章是由塞尔吉奥列霍夫和安德鲁帕多写的
最新的 C++核心指南检查器 作为Visual Studio 2017 15.3中本机代码分析工具的一部分部署。这些工具是为在visualstudio中使用而设计的,visualstudio提供了 用于筛选警告的规则集编辑器 . 但是,如果您希望在自动化构建中采用C++核心指南检查,该怎么办?
使用MSBug的C++核心指南检查器
本机代码分析检查器( 速食 )由自定义目标文件集成到MSBuild环境中。您可以使用Project属性来启用它,以及将C++核心指南检查器添加到预执行步骤中:
<PropertyGroup> <EnableCppCoreCheck>true</EnableCppCoreCheck> <CodeAnalysisRuleSet>CppCoreCheckRules.ruleset</CodeAnalysisRuleSet> <RunCodeAnalysis>true</RunCodeAnalysis> </PropertyGroup>
请确保在导入Microsoft.Cpp.targets文件之前添加这些属性。注意,您可以选择特定的规则集或创建自定义规则集(请参见 C++核心指南检查器中的管理规则 ),也可以使用包含其他预快速检查的默认规则集。
如果无法修改项目文件,可以通过命令行传递属性:
msbuild /p:EnableCppCoreCheck=true /p:RunCodeAnalysis=true /p:CodeAnalysisRuleSet=CppCoreCheckRules.ruleset ...
从命令行使用C++核心指南检查器
如果您想使用不依赖MSBuild的生成系统,您仍然可以运行checker,但是您需要熟悉代码分析引擎配置的一些内部结构(这在将来不一定会得到支持)。
总之,您需要为编译器设置一些环境变量并使用适当的命令行选项。最好在下面工作 本机工具命令提示符 “这样您就不必搜索编译器的特定路径,包括目录等。
- 环境变量:
-
set esp.extensions=cppcorecheck.dll
这告诉引擎加载C++核心指南模块。 -
set esp.annotationbuildlevel=ignore
此变量禁用处理SAL注释的附加逻辑。注释不影响C++核心指南检查器中的代码分析,但它们的处理需要时间(有时很多时间)。此设置是可选的,但强烈建议使用。 -
set caexcludepath=%include%
强烈建议禁用在标准标头上触发的警告。这个设置就是这样做的。您可以添加更多路径,例如项目中公共头的路径。
-
- 命令行选项:
-
/analyze
启用代码分析(同时考虑使用/analyze:only
和/analyze:quiet
). -
/analyze:plugin EspXEngine.dll
此选项将代码分析扩展引擎加载到PREfast代码分析引擎中。该引擎依次加载C++核心指南检查器。
-
如何启用特定项目文件的C++核心指南检查器
有时,进行非常集中的代码分析并仍然利用visualstudioide可能很有用。下面是一个示例场景,可用于大型项目以节省构建时间并简化结果筛选。
- 在命令shell中设置“esp.extensions”和“esp.annotationbuildlevel”环境变量。
- 从命令shell启动visualstudio以继承这些变量。
- 加载项目并打开其属性。
- 启用代码分析,选择适当的规则集,但不启用代码分析扩展。
- 现在转到您想用C++核心指南检查器分析的文件,并打开它的属性。
- 在“C/C++命令行选项”中添加/analyze:plugin EspXEngine.dll
- 禁用预编译头(“C/C++预编译头”)。这是必要的,因为扩展引擎可能会尝试从预编译头读取其内部信息,如果后者是用默认项目选项编译的,那么它将不兼容。
- 重建项目。它应该对所有文件运行代码分析。因为C++核心指南检查器在默认情况下不启用,所以它对构建性能的影响很小,只从常用代码分析工具生成结果。您可以使用适当的规则集隐藏这些。只对文件进行了一个小的性能影响,该文件被明确地配置为使用C++核心指南检查器。
同样的方法可以很容易地移植到MSBuild文件级别。可以使用 BuildMacro
项目。下面是一个如何添加 BuildMacro
到MSBuild配置。
<ItemGroup> <BuildMacro Include="Esp_AnnotationBuildLevel"> <EnvironmentVariable>true</EnvironmentVariable> <Value>Ignore</Value> </BuildMacro> <BuildMacro Include="Esp_Extensions"> <EnvironmentVariable>true</EnvironmentVariable> <Value>CppCoreCheck.dll</Value> </BuildMacro> </ItemGroup>
最后
如果您在自动化构建或CI系统中使用VisualStudio之外的C++核心指导检查程序,请让我们了解您的经验。
如果您有任何关于使用VC++核心指南检查器的VS或关于VisualC++的任何部分的反馈或建议,请告诉我们。我们可以通过以下评论和电子邮件联系到您( visualcpp@microsoft.com )你可以通过 帮助>报告产品中的问题 ,或通过 开发者社区 . 你也可以在Twitter上找到我们( @视觉 )还有Facebook( msftvisualcpp软件 ).