Itiviti-CPP-Analyzer (или ICA)-это плагин Clang, который приносит несколько статических проверок анализа (перечисленные здесь).
Если вы хотите внести свой вклад в проект, см. Appling.md.
Вам нужны Clang и Cmake, чтобы создать плагин. Также вам нужны пакеты libclang-10-dev и libclang-cpp10-dev . При желании вам может потребоваться заголовки Boost 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Здесь будет подавлена проверка значения по умолчанию