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檢查將在此處抑制