clang静态分析器(scan-build)可以与cmake --build一起使用吗?

pho*_*nix 6 c++ cmake clang-static-analyzer clang++

我想用铛静态分析器的命令行工具scan-build与方便cmake --build

大多数的的资源,我在网上找到似乎表明你需要一个过程分为两个步骤:

scan-build cmake .
scan-build make
Run Code Online (Sandbox Code Playgroud)

例如,此小示例程序带有一个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;
}
Run Code Online (Sandbox Code Playgroud)

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})
Run Code Online (Sandbox Code Playgroud)

如果我运行scan-build cmake --build cmake-build-release/它,即使构建了二进制文件,也找不到错误。无论如何,scan-build使用CMake一步就能开始工作吗?

Ale*_*ing 8

如果你想使用 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
Run Code Online (Sandbox Code Playgroud)

值得注意的是,clang-tidy现在已经完成了所有 CSA 检查。您可以使用相同的编译数据库技术在您的代码库上运行clang-tidy