Общее описание

Ниже приведены утилиты для проверки кода на C++ и примеры их настройки и использования совместно с CMake.

clang-tidy

Установка:

sudo apt-get install clang-tidy-10

Использование:

cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-10" path/to/source

В каталоге проекта нужно создать файл .clang-tidy в формате 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, в котором перечислены все правила для проверки именования идентификаторов приведён здесь.

CppCheck

Установка:

sudo apt-get install cppcheck

Использование:

cmake "-DCMAKE_CXX_CPPCHECK=/usr/bin/cppcheck;--std=c++11" path/to/source

This will run /usr/bin/cppcheck;–std=c11″ –source=/path/to/source/file.cxx on each c file in the project being built.

CppLint

Установка:

sudo apt-get install python3-cpplint

Использование:

cmake "-DCMAKE_CXX_CPPLINT=/usr/bin/cpplint;--linelength=79" path/to/source
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

Установка:

sudo apt-get install iwyu

Использование:

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

cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE ..

Clazy

Установка:

sudo apt-get install clazy clang-9

Использование:

CLAZY_CHECKS=level2 cmake -DCMAKE_CXX_COMPILER=clazy ..
CLANGXX=clang++-9 make