【问题标题】:Cpp Core Guidelines Checker using console and MSBuild使用控制台和 MSBuild 的 Cpp 核心指南检查器
【发布时间】:2018-04-10 15:48:52
【问题描述】:

我有一些为构建而设置的项目的解决方案。 我想为解决方案运行指南检查器。使用这个MSDN article我不想修改项目文件,所以我创建了batfile:

call "%VS140COMNTOOLS%\VsMSBuildCmd.bat"
msbuild Olymp.sln /p:EnableCppCoreCheck=true /p:RunCodeAnalysis=true /p:CodeAnalysisRuleSet="C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\Team Tools\Static Analysis Tools\Rule Sets\CppCoreCheckRules.ruleset" /t:Rebuild

项目设置为不执行代码分析

但我正在使用 bat 文件覆盖它 当我运行此代码时,我没有关于警告的输出(如在 MSDN 上),这是存在的:

E:\Code\Olymp\Olymp>msbuild Olymp.sln /p:EnableCppCoreCheck=true /p:RunCodeAnalysis=true /p:CodeAnalysisRuleSet="C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\Team Tools\Static Analysis Tools\Rule Sets\CppCoreCheckRules.ruleset" /t:Rebuild
Microsoft (R) Build Engine version 14.0.25420.1
Copyright (C) Microsoft Corporation. All rights reserved.

Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
Build started 10.04.2018 18:42:59.
Project "E:\Code\Olymp\Olymp\Olymp.sln" on node 1 (Rebuild target(s)).
ValidateSolutionConfiguration:
  Building solution configuration "Debug|x64".
Project "E:\Code\Olymp\Olymp\Olymp.sln" (1) is building "E:\Code\Olymp\Olymp\Olymp\Olymp.vcxproj" (2) on node 1 (Rebuil
d target(s)).
_PrepareForClean:
  Deleting file "x64\Debug\Olymp.tlog\Olymp.lastbuildstate".
InitializeBuildStatus:
  Creating "x64\Debug\Olymp.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
ClCompile:
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\CL.exe /c /ZI /nologo /W3 /WX- /sdl /Od /D CODE_
  ANALYSIS /D _MBCS /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"x64\Debug\\" /Fd"x64\D
  ebug\vc140.pdb" /Gd /TP /analyze /errorReport:queue   /analyze:quiet main.cpp
  main.cpp
Link:
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\link.exe /ERRORREPORT:QUEUE /OUT:"E:\Code\Olymp\
  Olymp\x64\Debug\Olymp.exe" /INCREMENTAL /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.
  lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiA
  ccess='false'" /manifest:embed /DEBUG:FASTLINK /PDB:"E:\Code\Olymp\Olymp\x64\Debug\Olymp.pdb" /TLBID:1 /DYNAMICBASE /
  NXCOMPAT /IMPLIB:"E:\Code\Olymp\Olymp\x64\Debug\Olymp.lib" /MACHINE:X64 x64\Debug\main.obj
  Olymp.vcxproj -> E:\Code\Olymp\Olymp\x64\Debug\Olymp.exe
  Olymp.vcxproj -> E:\Code\Olymp\Olymp\x64\Debug\Olymp.pdb (Partial PDB)
FinalizeBuildStatus:
  Deleting file "x64\Debug\Olymp.tlog\unsuccessfulbuild".
  Touching "x64\Debug\Olymp.tlog\Olymp.lastbuildstate".
Done Building Project "E:\Code\Olymp\Olymp\Olymp\Olymp.vcxproj" (Rebuild target(s)).

Done Building Project "E:\Code\Olymp\Olymp\Olymp.sln" (Rebuild target(s)).


Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.68

是的,我可以从项目中收集所有 cpps 并尝试将分析器作为 cl.exe 参数运行,但我想使用 msbuild。 我的设置有什么问题?

【问题讨论】:

    标签: c++ visual-studio msbuild visual-studio-2017 cpp-core-guidelines


    【解决方案1】:

    使用控制台和 MSBuild 的 Cpp 核心指南检查器

    我发现您已经通过脚本call "%VS140COMNTOOLS%\VsMSBuildCmd.bat" 设置了 Visual Studio 2015 命令行的环境变量。 %VS140COMNTOOLS% 用于设置 Visual Studio 2015 命令行的环境变量,而不是 Visual Studio 2017。然后您可以成功构建项目而不会出现任何错误,所以我怀疑这个项目可能是由 Visual Studio 2015 创建的。

    如果是,您将得到没有警告输出的结果。这是因为核心指南检查器默认安装在 Visual Studio 2017 中而不是 Visual Studio 2015 中,they are available as a NuGet package for Visual Studio 2015

    要为 Visual Studio 2017 命令行设置环境变量,您可以从以下位置调用VsMSBuildCmd.bat

    C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools
    

    由于您使用的是预览版 Visual Studio,它应该是:

    C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\Common7\Tools
    

    为了通过 MSBuild 验证这一点,我使用 Visual Studio 2017 创建了一个测试示例项目(不修改项目文件),然后创建了一个包含以下脚本的 bat 文件:

    call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsMSBuildCmd.bat"
    MSBuild "C:\Users\Admin\Source\repos\ConsoleApplication1\ConsoleApplication1.sln" /p:EnableCppCoreCheck=true /p:RunCodeAnalysis=true /p:CodeAnalysisRuleSet="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools\Static Analysis Tools\Rule Sets\CppCoreCheckRules.ruleset" /t:Rebuild
    pause
    

    执行 bat 文件后,我收到了警告:

    要验证这一点,您还可以使用 Visual Studio 2017 创建一个新项目,然后使用该 bat 文件构建它。

    希望这会有所帮助。

    【讨论】:

    • 谢谢,它运行良好,但仅适用于 vc141 工具集。如何在不更改项目和 v140 的情况下设置 NuGet 包?在我的情况下,我无法更改项目的工具集并添加其他包。
    • @BohdanBessonov,您的意思是您无法将工具集更改为 v141 并且无法将 nuget 包添加到项目中吗?如果是,恐怕没有更好的方法可以做到这一点,因为您无法使用 VS2017(无法更改 v140)和 VS2015(无法更改项目文件)来做到这一点。 :(。
    • 非常感谢,将尝试使用vc141重新编译(因为140和141兼容)
    猜你喜欢
    • 2017-12-17
    • 2019-06-24
    • 2020-05-29
    • 2013-03-16
    • 2019-02-09
    • 2016-10-23
    • 2018-01-28
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多