Itiviti-CPP-Analyzer (oder ICA) ist ein Clang-Plugin, das mehrere statische Analyseprüfungen mit sich bringt (hier aufgeführt).
Wenn Sie zum Projekt beitragen möchten, siehe Beitraging.md.
Sie brauchen Clang und CMake, um das Plugin zu bauen. Außerdem benötigen Sie libclang-10-dev und libclang-cpp10-dev Pakete. Optional benötigen Sie möglicherweise 1,68 als Header (sie können stattdessen während des Builds heruntergeladen werden).
Derzeit arbeitet ICA nur mit clang-10 zusammen
[ ! -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 wird nur benötigt, wenn Sie keine Header steigernBOOST_ROOT kann stattdessen angegeben werdenTARGET_COMPILER ist der für Tests verwendete Compiler. Geben Sie an, wenn Sie clang-10 nicht zur Zusammenstellung verwenden Das gebaute Plugin wird in ./build/libica-plugin.so sein
Sie brauchen libica-plugin.so und clang-10
Eine Komma -getrennte Liste von Schecks mit optional angegebenen EMIT -Stufen
Überprüfen Sie, ob die Namen hier aufgeführt sind. Alias, um alle Schecks aufzulisten - all
Stufen ausgeben:
none - Überprüfung ist deaktiviertwarn - StandardeinstellungerrBeispiel:
all=warn,-redundant-noexcept,erase-in-loop=err
Aktiviert all Überprüfungen erase-in-loop Warnstufe, redundant-noexcept
Sie benötigen zusätzliche Flaggen:
-load path/to/libica-plugin.so-add-plugin ica-plugin-plugin-arg-ica-plugin checks=$CHECKS-plugin-arg-ica-plugin no-url -Deaktivieren CHECKS sind die Checkliste
Jedes Argument für den Compiler -Frontend wird mit -Xclang übergeben, daher sieht die endgültige Liste so aus:
-Xclang -load -Xclang ../build/libica-plugin.so
-Xclang -add-plugin -Xclang ica-plugin
-Xclang -plugin-arg-ica-plugin -Xclang checks=$CHECKS
Wenn Sie ein CMAKE -Projekt haben, gibt es Optionen, um ICA einfach als externes Projekt oder als Unterverzeichnis in Ihrem Arbeitsbereich zu verwenden. In jedem Fall sollten mehrere CMake -Helper verfügbar sein:
add_ica_checks(check1 check2 ...) - Plugin laden und angegebene Schecks aktivieren. Sie können hier wie gewohnt Emit Levels verwenden.ica_no_url() - Deaktivieren Sie die Integration von URL in Schecknachricht. Ausführen target_ica_checks(MyTarget VISIBILITY ...) oder target_ica_no_url(MyTarget VISIBILITY) wird auf ein einzelnes Ziel und/oder seine Abhängigkeiten angewendet.
Hier sind einige minimale Integrationsbeispiele:
Zuerst müssen Sie Ihre ICA (siehe) erstellen und installieren lassen:
cd build && cmake --install . --install-prefix /path/to/ica/installation/Und fügen Sie dies zu Ihren cmakelists.txt hinzu
# 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)Fügen Sie ICA -Quellen als Unterverzeichnis zu Ihrem Projekt hinzu (wahrscheinlich über Git -Submodule ) und fügen Sie dies Ihren cmakelists.txt hinzu.
# 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 -Kommentar unterdrückt jede Warnung in der Leitung
map.emplace( 0 , std::string{}); // NOLINTDie EMPLACE-Default-Wert-Prüfung wird hier unterdrückt