= Статический анализ кода :category: Программирование :tags: программирование, отладка, cppcheck, iwyu, clang-tidy, cpplint, clazy, == Общее описание Ниже приведены утилиты для проверки кода на C++ и примеры их настройки и использования совместно с https://cmake.org/[CMake]. === http://clang.llvm.org/extra/clang-tidy/[clang-tidy] Установка: [source,sh] ---- sudo apt-get install clang-tidy-10 ---- Использование: [source,sh] ---- cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-10" path/to/source ---- В каталоге проекта нужно создать файл `.clang-tidy` в формате YAML со списком выполняемых проверок. Например: [source,yaml] ---- --- Checks: '-*, bugprone-*, clang-analyzer-*, cppcoreguidelines-*, google-*, llvm-*, misc-*, modernize-*, readability-*, performance-*, portability-*, -cppcoreguidelines-owning-memory, -cppcoreguidelines-avoid-magic-numbers, -cppcoreguidelines-pro-bounds-array-to-pointer-decay, -readability-magic-numbers, -readability-else-after-return, -modernize-use-trailing-return-type, -modernize-avoid-c-arrays, -performance-no-automatic-move, ' CheckOptions: - key: readability-identifier-naming.ClassCase value: CamelCase - key: readability-identifier-naming.ClassMemberCase value: camelBack ... ---- Пример файла `.clang-tidy`, в котором перечислены все правила для проверки именования идентификаторов приведён https://git.246060.ru/f1x1t/clang-tidy-readability-identifier-naming[здесь]. === CppCheck Установка: [source,sh] ---- sudo apt-get install cppcheck ---- Использование: [source,sh] ---- cmake "-DCMAKE_CXX_CPPCHECK=/usr/bin/cppcheck;--std=c++11" path/to/source ---- This will run /usr/bin/cppcheck;–std=c++11″ –source=/path/to/source/file.cxx on each c++ file in the project being built. === CppLint Установка: [source,sh] ---- sudo apt-get install python3-cpplint ---- Использование: [source,sh] ---- cmake "-DCMAKE_CXX_CPPLINT=/usr/bin/cpplint;--linelength=79" path/to/source ---- [source,sh] ---- make -j24 2>&1 1>/dev/null | ../cpplint2tasks.pl > 222.tasks ---- This will run /usr/local/bin/cpplint –linelength=79 on each c++ file in the project being built. === IWYU Установка: [source,sh] ---- sudo apt-get install iwyu ---- Использование: [source,sh] ---- cmake "-DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=/usr/bin/iwyu;--transitive_includes_only" .. ---- This will run /usr/bin/iwyu –transitive_includes_only on each c++ file in the project being built. === LWYU [source,sh] ---- cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE .. ---- === Clazy Установка: [source,sh] ---- sudo apt-get install clazy clang-9 ---- Использование: [source,sh] ---- CLAZY_CHECKS=level2 cmake -DCMAKE_CXX_COMPILER=clazy .. CLANGXX=clang++-9 make ----