Cpp Core Guidelines Checker с использованием консоли и MSBuild

У меня есть решение с некоторыми проектами, которые созданы для строительства. Я хочу запустить контрольные проверки для решений. Используя эту статью MSDN, я не хочу изменять файлы проекта, поэтому я создал 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. Что не так с моей настройкой?

1 ответ

Решение

Cpp Core Guidelines Checker с использованием консоли и MSBuild

Я обнаружил, что вы установили переменные среды для командной строки Visual Studio 2015 с помощью сценария call "%VS140COMNTOOLS%\VsMSBuildCmd.bat", %VS140COMNTOOLS% используется для установки переменных среды для командной строки Visual Studio 2015, а не Visual Studio 2017. Затем можно успешно построить проект без каких-либо ошибок, поэтому я подозреваю, что этот проект может быть создан Visual Studio 2015.

Если да, вы получите результат без вывода предупреждений. Это потому, что основные средства проверки рекомендаций установлены по умолчанию в Visual Studio 2017, а не в Visual Studio 2015, они доступны в виде пакета NuGet для 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.

Надеюсь это поможет.

Другие вопросы по тегам