133 lines
2.7 KiB
Markdown
133 lines
2.7 KiB
Markdown
---
|
||
title: "Статический анализ кода"
|
||
category: Программирование
|
||
tags: программирование, отладка, cppcheck, iwyu, clang-tidy, cpplint, clazy,
|
||
summary:
|
||
...
|
||
|
||
## Общее описание
|
||
|
||
Ниже приведены утилиты для проверки кода на C++ и примеры их настройки и использования
|
||
совместно с [CMake](https://cmake.org/).
|
||
|
||
### [clang-tidy](http://clang.llvm.org/extra/clang-tidy/)
|
||
|
||
Установка:
|
||
|
||
```sh
|
||
sudo apt-get install clang-tidy-6.0
|
||
```
|
||
|
||
Использование:
|
||
|
||
```sh
|
||
cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-6.0" path/to/source
|
||
```
|
||
|
||
В каталоге проекта нужно создать файл `.clang-tidy` в формате YAML со списком
|
||
выполняемых проверок. Например:
|
||
|
||
```yaml
|
||
---
|
||
Checks: '-*,
|
||
clang-diagnostic-*,
|
||
readability-*,
|
||
modernize-*,
|
||
cppcoreguidelines-*,
|
||
google-*,
|
||
bugprone-*'
|
||
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
|
||
|
||
Установка:
|
||
|
||
```sh
|
||
sudo apt-get install cppcheck
|
||
```
|
||
|
||
Использование:
|
||
|
||
```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
|
||
|
||
Установка:
|
||
|
||
```sh
|
||
sudo apt-get install python3-cpplint
|
||
```
|
||
|
||
Использование:
|
||
|
||
```sh
|
||
cmake "-DCMAKE_CXX_CPPLINT=/usr/bin/cpplint;--linelength=79" path/to/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
|
||
|
||
Установка:
|
||
|
||
```sh
|
||
sudo apt-get install iwyu
|
||
```
|
||
|
||
Использование:
|
||
|
||
|
||
```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
|
||
|
||
```sh
|
||
cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE ..
|
||
```
|
||
|
||
### Clazy
|
||
|
||
|
||
Установка:
|
||
|
||
```sh
|
||
sudo apt-get install clazy clang-6.0
|
||
```
|
||
|
||
Использование:
|
||
|
||
```sh
|
||
CLAZY_CHECKS=level2 cmake -DCMAKE_CXX_COMPILER=clazy ..
|
||
CLANGXX=clang++-6.0 make
|
||
```
|
||
|
||
|
||
### PVS-Studio
|
||
|