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_INTERNET 、ヘッダーをブーストしていない場合にのみ必要ですBOOST_ROOTを指定できますTARGET_COMPILER 、テストに使用されるコンパイラです。 clang-10を使用しないかどうかを指定します構築されたプラグインは./build/libica-plugin.soになります
libica-plugin.soとclang-10が必要です
オプションで指定されたエミットレベルを使用したチェックのコンマ分離リスト
小切手名はここにリストされています。すべてのチェックをリストするエイリアス - 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 ...) - プラグインを読み込み、指定されたチェックを有効にします。ここでは、ここでエミットレベルを使用できます。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サブモジュールを介して)、これを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{}); // NOLINTここでは、emplace-default-valueチェックが抑制されます