Itiviti-CPP-Analyzer(或ICA)是一个clang插件,它带来了几个静态分析检查(此处列出)。
如果您想为该项目做出贡献,请参见贡献。
您需要Clang和Cmake来构建插件。另外,您还需要libclang-10-dev和libclang-cpp10-dev软件包。可选地,您可能需要提升1.68+标头(可以在构建过程中下载)。
目前,ICA仅与clang-10合作
[ ! -d build ] && mkdir build
cd build
cmake
-DGCC_TOOLCHAIN= < path/to/gcc/toolchain (probably, /usr/lib) >
-DBOOST_FROM_INTERNET=ON
-DTARGET_COMPILER=clang++-10
../
cmake --build . --parallelBOOST_FROM_INTERNETBOOST_ROOTTARGET_COMPILER是用于测试的编译器。指定是否不使用clang-10进行编译内置的插件将在./build/libica-plugin.so中
您需要libica-plugin.so和clang-10
逗号分开的支票列表,可选指定的EMIT级别
检查名称在此处列出。别名列出所有支票 - all
发射水平:
none - 检查是禁用的warn - 默认err例子:
all=warn,-redundant-noexcept,erase-in-loop=err
将启用具有警告级别的all检查,禁用redundant-noexcept并设置erase-in-loop级别的错误级别
您需要其他标志:
-load path/to/libica-plugin.so-add-plugin ica-plugin-plugin-arg-ica-plugin checks=$CHECKS-plugin-arg-ica-plugin no-url可选地将URL集成到检查消息中CHECKS是检查清单
编译器前端的每个论点都会通过-Xclang传递,因此最终列表看起来像:
-Xclang -load -Xclang ../build/libica-plugin.so
-Xclang -add-plugin -Xclang ica-plugin
-Xclang -plugin-arg-ica-plugin -Xclang checks=$CHECKS
如果您有一个CMAKE项目,则可以轻松使用ICA,无论是外部项目还是工作空间中的子目录。无论如何,应该有几个CMAKE助手可用:
add_ica_checks(check1 check2 ...) - 加载插件并启用指定的检查。您可以像往常一样在此处使用EMIT级别。ica_no_url() - 禁用将URL集成到检查消息中。运行target_ica_checks(MyTarget VISIBILITY ...)或target_ica_no_url(MyTarget VISIBILITY)将对单个目标和/或其依赖关系应用配置。
以下是一些最少的集成示例:
首先,您需要建立ICA(请参阅)并安装:
cd build && cmake --install . --install-prefix /path/to/ica/installation/并将其添加到您的cmakelists.txt
# NOTE: `find_package` should be located after root `project(...)`
project (<your project> LANGUAGES C CXX)
...
# If ICA is installed in unusual location
list ( APPEND CMAKE_PREFIX_PATH "/path/to/ica/installation" )
find_package (ICA CONFIG REQUIRED)
add_ica_checks(<your checks list>)
...
# NOTE: Added checks will be effective only for subsequent targets
add_subdirectory (my-subdir)
add_library (my-lib)
add_executable (my-exec)将ICA源作为子目录添加到您的项目(可能是通过Git subpodule ),然后将其添加到您的cmakelists.txt
# NOTE: `add_subdirectory` should be located after root `project(...)`
project (<your project> LANGUAGES C CXX)
...
# Set any other cache variables here: GCC_TOOLCHAIN, LLVM_ROOT, ...
set (BOOST_FROM_INTERNET ON )
add_subdirectory (itiviti-cpp-analyzer)
add_ica_checks(<your checks list>)
...
# NOTE: Added checks will be effective only for subsequent targets
add_subdirectory (my-subdir)
add_library (my-lib)
add_executable (my-exec)// NOLINT评论将压制任何警告
map.emplace( 0 , std::string{}); // NOLINTEmplace-default-value检查将在此处抑制