В настоящее время я пытаюсь интегрировать Clang Stati c Analyzer v9.0.1 в мою систему сборки CMake v3.16.5 с использованием компилятора Microsoft Visual C ++ (MSV * 1167). *) v19.25.28610.4 в операционной системе Windows v10.0.18363.720.
Все построено для архитектуры x86_64. LLVM и Clang были собраны из исходного кода.
После прочтения во Всемирной паутине (WWW), кажется, есть несколько способов использования Clang Stati c Analyzer. К сожалению, документация ужасна, и, похоже, в операционной системе Windows есть некоторые особые особенности (в основном связанные с clang-cl
), поэтому ее не так просто интегрировать. IMO, профессиональному программисту не нужно больше одного часа, чтобы интегрировать его в стандартную систему сборки C ++ defacto.
Кажется, что есть как минимум пять возможностей для вызова Clang Stati c Analyzer:
scan-build
скрипт. - Требуется Perl среда выполнения.
- Может анализировать несколько файлов одним вызовом.
- Может генерировать HTML (больше, чем другие возможности) ), plist или sarif выходные файлы.
- Моя проблема: Не обнаруживает ошибок, всегда печатает
scan-build: No bugs found.
в STDOUT.
clang-check
исполняемый файл. - Требуется JSON файл базы данных компиляции
compile_commands.json
. - Может анализировать несколько файлов за один вызов.
- Должен иметь возможность генерировать HTML файл отчета (с). с помощью аргумента
--extra-arg
. - Моя проблема: Невозможно заставить его работать (см. второй скрипт ниже).
clang
/ clang++
исполняемых файлов. - Может анализировать один файл одним вызовом.
- Моя проблема : В принципе работает, но выглядит для меня наихудшей возможностью (из-за отсутствия информации о сборке).
c++-analyzer.bat
/ ccc-analyzer.bat
пакетные сценарии. - Кажется, поддерживает только Clang и G CC.
- Моя проблема : я не могу найти любую документацию для этих сценариев .
clang-tidy
, исполняемый только с проверками clang-analyzer-*
. - Может использовать файл базы данных JSON
compile_commands.json
. - Может анализировать несколько файлов одним вызовом.
- Моя проблема : Невозможно сгенерировать HTML файлов отчетов, но только YAML.
Вот три пакетных сценария, по одному для каждого из первых трех подходов:
scan-build-example.cmd
@echo off
setlocal
cls
rem Configure
call scan-build.bat^
-v^
-v^
-v^
-analyze-headers^
--force-analyze-debug-code^
-o _scan_build_out^
--keep-cc^
--html-title="Scan Build Example"^
--show-description^
--use-cc="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
--use-c++="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
-stats^
-maxloop 4^
-internal-stats^
--use-analyzer="E:\dev\native\llvm\llvm-9.0.1\Release\static\x64-windows-msvc1924-v142\bin\clang.exe"^
-analyzer-config stable-report-filename=true^
-enable-checker core,cplusplus,deadcode,nullability,optin,osx,security,unix,valist^
cmake^
-S "D:\cmake\cmake-example-clang-static-analyzer"^
-B "D:\cmake\cmake-example-clang-static-analyzer\_scan-build"^
-G "Ninja"^
-DCMAKE_C_COMPILER:PATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
-DCMAKE_CXX_COMPILER:PATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
-DCMAKE_BUILD_TYPE:STRING=Debug
rem Build
call scan-build.bat^
-v^
-v^
-v^
-analyze-headers^
--force-analyze-debug-code^
-o _scan_build_out^
--keep-cc^
--html-title="Scan Build Example"^
--show-description^
--use-cc="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
--use-c++="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
-stats^
-maxloop 4^
-internal-stats^
--use-analyzer="E:\dev\native\llvm\llvm-9.0.1\Release\static\x64-windows-msvc1924-v142\bin\clang.exe"^
-analyzer-config stable-report-filename=true^
-enable-checker core,cplusplus,deadcode,nullability,optin,osx,security,unix,valist^
cmake^
--build "D:\cmake\cmake-example-clang-static-analyzer\_scan-build"^
--config Debug
clang-check-example.cmd
@echo off
setlocal
cls
set out_dir=%~dp0.\_clang_check_out
mkdir "%out_dir%" > nul 2>&1
rem Issue: "warning: could not create file in 'main.plist': no such file or directory"
clang-check^
-analyze^
-extra-arg=-Xclang^
-extra-arg=-analyzer-config^
-extra-arg=-Xclang^
-extra-arg=add-pop-up-notes=true,mode=deep^
-extra-arg=-Xclang^
-extra-arg=-analyzer-checker=core,cplusplus,deadcode,nullability,optin,osx,security,unix,valist^
-extra-arg=-Xclang^
-extra-arg=-analyzer-output=html^
-extra-arg=-o=%out_dir%^
-p "D:\cmake\cmake-example-clang-static-analyzer\_build"^
"D:\cmake\cmake-example-clang-static-analyzer\app\main.cpp"
clang_analyze-example.cmd
@echo off
setlocal
cls
set out_dir=%~dp0.\_clang_analyzer_out
mkdir "%out_dir%"
clang++^
--analyze^
-Xanalyzer^
-analyzer-checker=core,cplusplus,deadcode,nullability,optin,osx,security,unix,valist^
-Xanalyzer^
-analyzer-output=html^
-o "%out_dir%"^
-I"D:\cmake\cmake-example-clang-static-analyzer\src"^
"D:\cmake\cmake-example-clang-static-analyzer\app\main.cpp
Мои вопросы:
- Как заставить
scan-build.bat
работать на Windows (я пробовал оба с использованием MSV C и Clang )? - Как передать параметры в
clang-check.exe
, чтобы он создал HTML выходные файлы и избавился от предупреждения warning: could not create file in 'main.plist': no such file or directory
? - Может использоваться
clang.exe
/ clang++.exe
подходящая альтернатива (imo, в ней отсутствует информация о сборке, которая должна быть доступна с двумя другими нерабочими альтернативами)?
В общем: Какой самый простой способ сгенерировать HTML отчет с помощью Clang Stati c Анализатор usi ng MSV C on Windows?
Вопросы, связанные с данной:
История изменений:
- 2020-03-20T12: 06Z
- Обновление
clang-check-example.cmd
скрипт.
- 2020-03-20T08: 50Z
- Добавить упоминание
clang-tidy
.