update
This commit is contained in:
parent
3355f9185e
commit
007afda3d1
@ -52,8 +52,7 @@ Hitchhiker’s Guide to the CMake]
|
|||||||
|
|
||||||
Назначение каталогов приведено в таблице.
|
Назначение каталогов приведено в таблице.
|
||||||
|
|
||||||
.Назначение каталогов
|
[cols="2,4",options="header",]
|
||||||
[cols="2m,4",options="header",]
|
|
||||||
|===
|
|===
|
||||||
|Каталог |Назначение
|
|Каталог |Назначение
|
||||||
|`cmex/_build` |Результаты компиляции
|
|`cmex/_build` |Результаты компиляции
|
||||||
|
@ -1,116 +1,16 @@
|
|||||||
= PVS-Studio
|
Описание Переменная kFlat kOpt kStandard kUser kHome
|
||||||
:category: Программирование
|
Путь к каталогу с исполняемым файлом m_binaryDirectory . /opt/proj/bin /usr/bin _build/Debug/bin $HOME/.local/bin
|
||||||
:tags: программирование, C, C++, отладка,
|
Имя проекта, которое используется при формировании имён файлов и каталогов m_projectName proj proj proj proj proj
|
||||||
|
Путь к пользовательскому каталогу с файлами настройки m_userConfigDirectory $HOME/.config/proj $HOME/.config/proj $HOME/.config/proj $HOME/.config/proj $HOME/.config/proj
|
||||||
|
Путь к системному каталогу с файлами настройки m_systemConfigDirectory . /opt/proj/etc /etc/proj _build/Debug/etc $HOME/.config/proj
|
||||||
|
Имя файла настройки m_configFileName proj.conf proj.conf proj.conf proj.conf proj.conf
|
||||||
|
Расширение для файла настройки m_configFileExtension conf conf conf conf conf
|
||||||
|
Путь к пользовательскому каталогу с изменяемыми файлами m_userVarDataDirectory $HOME/.local/share/proj/lib $HOME/.local/share/proj/lib $HOME/.local/share/proj/lib $HOME/.local/share/proj/lib $HOME/.local/share/proj/lib
|
||||||
|
Путь к системному каталогу с изменяемыми файлами m_systemVarDataDirectory . /opt/proj/files/lib /var/lib/proj _build/Debug/files/lib $HOME/.local/share/proj/lib
|
||||||
|
Путь к пользовательскому каталогу с неизменяемыми файлами m_userConstDataDirectory $HOME/.local/share/proj/data $HOME/.local/share/proj/data $HOME/.local/share/proj/data $HOME/.local/share/proj/data $HOME/.local/share/proj/data
|
||||||
|
Путь к системному каталогу с неизменяемыми файлами m_systemConstDataDirectory . /opt/proj/files/data /usr/share/proj _build/Debug/files/data $HOME/.local/share/proj/data
|
||||||
|
Путь к пользовательскому каталогу с журналами работы m_userLogDirectory $HOME/.local/share/proj/log $HOME/.local/share/proj/log $HOME/.local/share/proj/log $HOME/.local/share/proj/log $HOME/.local/share/proj/log
|
||||||
|
Путь к системному каталогу с журналами работы m_systemLogDirectory . /opt/proj/files/log /var/log/proj _build/Debug/files/log $HOME/.local/share/proj/log
|
||||||
|
Путь к каталогу с временными файлами m_tempDirectory $TMPDIR $TMPDIR $TMPDIR $TMPDIR $TMPDIR
|
||||||
|
Путь к домашнему каталогу текущего пользователя m_homeDirectory $HOME $HOME $HOME $HOME $HOME
|
||||||
|
|
||||||
:toc:
|
|
||||||
|
|
||||||
== Информация и лицензия
|
|
||||||
|
|
||||||
https://www.viva64.com/ru/pvs-studio/[PVS-Studio] — это инструмент для
|
|
||||||
статического анализа исходного кода программ, написанных на языках С,
|
|
||||||
C++.
|
|
||||||
|
|
||||||
Для использования в Linux нужно чтобы в каталоге `~/.config/PVS-Studio`
|
|
||||||
находился лицензионный ключ или в начале исходных файлов с расширениями
|
|
||||||
`*.c`, `*.cpp`, `*.cxx` и т.п.
|
|
||||||
https://www.viva64.com/ru/b/0457/[присутствовали строки]
|
|
||||||
|
|
||||||
....
|
|
||||||
// This is an independent project of an individual developer. Dear PVS-Studio, please check it.
|
|
||||||
|
|
||||||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
|
||||||
....
|
|
||||||
|
|
||||||
== Настройка и компиляция проекта
|
|
||||||
|
|
||||||
Полное руководство для работы в Linux находится
|
|
||||||
https://www.viva64.com/ru/m/0036/[здесь], а ниже приведён список типовых
|
|
||||||
команд.
|
|
||||||
|
|
||||||
Настройка проекта для CMake:
|
|
||||||
|
|
||||||
[source,sh]
|
|
||||||
----
|
|
||||||
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On <src-tree-root>
|
|
||||||
----
|
|
||||||
|
|
||||||
Сборка проекта с помощью `make`:
|
|
||||||
|
|
||||||
[source,sh]
|
|
||||||
----
|
|
||||||
pvs-studio-analyzer trace -- make -j$(nproc)
|
|
||||||
----
|
|
||||||
|
|
||||||
Настройка и сборка проекта с использованием Ninja:
|
|
||||||
|
|
||||||
[source,sh]
|
|
||||||
----
|
|
||||||
cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=On <src-tree-root>
|
|
||||||
ninja -t compdb
|
|
||||||
----
|
|
||||||
|
|
||||||
== Анализ проекта
|
|
||||||
|
|
||||||
Для анализа проектов используется утилита `pvs-studio-analyzer`. По
|
|
||||||
умолчанию включены только диагностики общего назначения (General
|
|
||||||
Analysis, GA). Включить дополнительные правила можно с помощью опции
|
|
||||||
`-a`:
|
|
||||||
|
|
||||||
....
|
|
||||||
-a [MODE], --analysis-mode [MODE]
|
|
||||||
MODE defines the type of warnings:
|
|
||||||
1 - 64-bit errors;
|
|
||||||
2 - reserved;
|
|
||||||
4 - General Analysis;
|
|
||||||
8 - Micro-optimizations;
|
|
||||||
16 - Customers Specific Requests;
|
|
||||||
32 - MISRA.
|
|
||||||
Modes can be combined by adding the values
|
|
||||||
Default: 4
|
|
||||||
....
|
|
||||||
|
|
||||||
Выбор типов предупреждений осуществляется на основе побитовой маски из
|
|
||||||
приведённых выше типов. Чтобы выполнить анализ, исключив проверки MISRA,
|
|
||||||
нужно выполнить
|
|
||||||
|
|
||||||
[source,sh]
|
|
||||||
----
|
|
||||||
pvs-studio-analyzer analyze -a 29 -j$(nproc) -o pvs.log
|
|
||||||
----
|
|
||||||
|
|
||||||
Составление отчёта для просмотра в Qt Creator:
|
|
||||||
|
|
||||||
[source,sh]
|
|
||||||
----
|
|
||||||
plog-converter -t tasklist -o pvs.tasks pvs.log
|
|
||||||
----
|
|
||||||
|
|
||||||
При составлении отчёта уровень детализации можно изменять с помощью
|
|
||||||
ключа `-a` (`--analyzer`), который производит фильтрацию предупреждений
|
|
||||||
согласно маске, которая имеет вид `MessageType:MessageLevels`, где
|
|
||||||
`MessageType` может принимать один из следующих типов: `GA`, `OP`, `64`,
|
|
||||||
`CS`, `MISRA`, а `MessageLevels` может принимать значения от `1` до `3`.
|
|
||||||
Возможна комбинация разных масок через `;`. Например, при составлении
|
|
||||||
отчёта для просмотра в формате HTML можно повысить уровень детализации:
|
|
||||||
|
|
||||||
[source,sh]
|
|
||||||
----
|
|
||||||
plog-converter -t fullhtml -a "GA:1,2,3;64:1;OP:1,2;CS:1,2" -o html pvs.log
|
|
||||||
----
|
|
||||||
|
|
||||||
Составление отчёта для редактора Vim:
|
|
||||||
|
|
||||||
[source,sh]
|
|
||||||
----
|
|
||||||
plog-converter -a "GA:1,2" -t errorfile -o pvs.err pvs.log
|
|
||||||
----
|
|
||||||
|
|
||||||
Для просмотра отчёта в редакторе Vim нужно открыть файл `pvs.err` и
|
|
||||||
выполнить команды:
|
|
||||||
|
|
||||||
[source,vim]
|
|
||||||
----
|
|
||||||
:set makeprg=cat\ % " выбор программы для компиляции в текущей сессии
|
|
||||||
:silent make " имитация сборки
|
|
||||||
:cw " открытие результатов в нижнем окне
|
|
||||||
----
|
|
||||||
|
@ -13,14 +13,14 @@
|
|||||||
|
|
||||||
[source,sh]
|
[source,sh]
|
||||||
----
|
----
|
||||||
sudo apt-get install clang-tidy-6.0
|
sudo apt-get install clang-tidy-10
|
||||||
----
|
----
|
||||||
|
|
||||||
Использование:
|
Использование:
|
||||||
|
|
||||||
[source,sh]
|
[source,sh]
|
||||||
----
|
----
|
||||||
cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-6.0" path/to/source
|
cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-10" path/to/source
|
||||||
----
|
----
|
||||||
|
|
||||||
В каталоге проекта нужно создать файл `.clang-tidy` в формате YAML со
|
В каталоге проекта нужно создать файл `.clang-tidy` в формате YAML со
|
||||||
@ -30,12 +30,25 @@ cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-6.0" path/to/source
|
|||||||
----
|
----
|
||||||
---
|
---
|
||||||
Checks: '-*,
|
Checks: '-*,
|
||||||
clang-diagnostic-*,
|
bugprone-*,
|
||||||
readability-*,
|
clang-analyzer-*,
|
||||||
modernize-*,
|
|
||||||
cppcoreguidelines-*,
|
cppcoreguidelines-*,
|
||||||
google-*,
|
google-*,
|
||||||
bugprone-*'
|
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:
|
CheckOptions:
|
||||||
- key: readability-identifier-naming.ClassCase
|
- key: readability-identifier-naming.ClassCase
|
||||||
value: CamelCase
|
value: CamelCase
|
||||||
@ -124,7 +137,7 @@ cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE ..
|
|||||||
|
|
||||||
[source,sh]
|
[source,sh]
|
||||||
----
|
----
|
||||||
sudo apt-get install clazy clang-6.0
|
sudo apt-get install clazy clang-9
|
||||||
----
|
----
|
||||||
|
|
||||||
Использование:
|
Использование:
|
||||||
@ -132,7 +145,6 @@ sudo apt-get install clazy clang-6.0
|
|||||||
[source,sh]
|
[source,sh]
|
||||||
----
|
----
|
||||||
CLAZY_CHECKS=level2 cmake -DCMAKE_CXX_COMPILER=clazy ..
|
CLAZY_CHECKS=level2 cmake -DCMAKE_CXX_COMPILER=clazy ..
|
||||||
CLANGXX=clang++-6.0 make
|
CLANGXX=clang++-9 make
|
||||||
----
|
----
|
||||||
|
|
||||||
=== PVS-Studio
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user