我想使用clang静态分析器命令行工具scan-build
,方便cmake --build
。
scan-build cmake .
scan-build make
例如,对于这个带有scan-build
捕获的错误的小示例程序:
#include <iostream>
int fun() {
int x;
return x; # main.cpp:5:5: warning: Undefined or garbage value returned to caller
}
int main() {
int a = fun();
std::cout << "Hello, World! " << a << std::endl;
}
CMakeLists.txt
:
cmake_minimum_required(VERSION 3.5)
project(test_program)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(test_program ${SOURCE_FILES})
如果我运行scan-build cmake --build cmake-build-release/
它就找不到错误,即使构建了二进制文件。无论如何让scan-build
与CMake一起完成一个步骤?
答案 0 :(得分:0)
如果您想使用 Clang 静态分析器,您只需设置 CMAKE_EXPORT_COMPILE_COMMANDS=YES
。这将创建一个 CSA 可以读取的编译数据库。您甚至不需要构建您的项目。该文件位于:/path/to/build/compile_commands.json
。
scan-build
专为无法自行创建编译数据库的项目而设计。
然后你可以运行:
analyze-build --cdb /path/to/build/compile_commands.json \
--use-analyzer /path/to/clang \
--output /path/to/output
值得注意的是,clang-tidy
现在拥有所有 CSA 检查。您可以使用相同的编译数据库技术在您的代码库上运行 clang-tidy
。