我目前正在尝试将 Clang静态分析器 v9.0.1到我的 CMake v3.16.5 构建系统,在Windows v10.0.18363.720操作系统上使用Microsoft Visual C++ Compiler (MSVC) v19.25.28610.4。
一切都是针对x86_64架构构建的。LLVM和Clang都是从源码构建的。
在万维网(WWW)上阅读了一些资料后,似乎有多种方法可以使用Clang静态分析器。遗憾的是,文档很糟糕,而且在Windows操作系统上似乎有一些特殊的怪癖(主要与 clang-cl
),因此它并不是直接就能集成的。IMO,一个专业的程序员应该不需要超过一个小时的时间就可以将其集成到C++事实上的标准构建系统中。
似乎至少有五种可能来调用Clang静态分析器。
scan-build
脚本scan-build: No bugs found.
到STDOUT。clang-check
可执行。compile_commands.json
.--extra-arg
争论。clang
clang++
可执行文件。c++-analyzer.bat
ccc-analyzer.bat
批量脚本。clang-tidy
可执行的 clang-analyzer-*
仅检查。compile_commands.json
.这里有三个批处理脚本,前三种方法各有一个。
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上工作(我试过使用MSVC和Clang)?clang-check.exe
使它能够创建HTML输出文件,并摆脱了 warning: could not create file in 'main.plist': no such file or directory
警告?clang.exe
clang++.exe
一个合适的替代方案(我认为,它缺少了其他两个不工作的替代方案应该有的构建信息)?一般来说。在Windows上使用MSVC用Clang静态分析器生成HTML报告的最简单方法是什么?
相关问题:如何让Clang Static Analyzer在Windows上使用MSVC生成HTML报表?
更改日志
clang-check-example.cmd
脚本。clang-tidy
.