vak: (Default)
[personal profile] vak
Вызов cppcheck выглядит намного проще по сравнению с clang-tidy. Но и проверяет он меньше.
cppcheck --std=c++14 --enable=style --error-exitcode=1 --inline-suppr --quiet --suppress=*:*/_deps/* --suppress=*:*/grammar.hpp --library=googletest.xml -I/some/path -DNDEBUG source.cpp
Флаг --checks задаёт список правил для проверки.

Флаги --suppress подавляют файлы, загруженные со стороны (типа Googletest) или сгенерённые посредством Bison.

Флаг --library берет из указанного файла дополнительную информацию о семантике "странных" конструкций, имеющихся в коде. К примеру, для Googletest надо описать макросы вида TEST():
<?xml version="1.0"?>
<def version="2">
<define name="TEST(A,B)" value="void __ ## A ## _ ## B ( )"/>
<define name="TEST_F(A,B)" value="void __ ## A ## _ ## B ( )"/>
<define name="GTEST_TEST(A,B)" value="void __ ## A ## _ ## B ( )"/>
</def>
Но самое приятное - cppcheck легко интегрируется с cmake. Достаточно добавить в CMakeLists.txt следующий фрагмент:
find_program(Cppcheck NAMES cppcheck)
if(NOT (Cppcheck MATCHES "NOTFOUND"))
set(CMAKE_CXX_CPPCHECK "${Cppcheck}"
"--std=c++14" # Задаём стандарт языка
"--enable=style" # Что проверять
"--error-exitcode=1" # Всякая ошибка фатальна
"--inline-suppr" # Разрешить управляющие конструкции вида // cppcheck-suppress ID
"--quiet"
"--suppress=*:*/_deps/*" # Игнорировать проблемы в Googletest
"--suppress=*:*/grammar.hpp" # Игнорировать код от Bison
"--library=${CMAKE_SOURCE_DIR}/googletest.xml" # Разпознавать макрос TEST()
)
endif()
И при сборке проекта cppcheck будет вызываться автоматически для всех файлов Си++.