релиз-окна | OSS-Fuzz | Статус сборки сканирования покрытия | включить то, что вы используете | Лицензия |
---|---|---|---|---|
Первоначальное название этой программы было «C++check», но позже оно было изменено на «Cppcheck».
Несмотря на название, Cppcheck предназначен как для C, так и для C++.
Руководство доступно в Интернете.
Cppcheck — это хобби-проект с ограниченными ресурсами. Вы можете помочь нам, пожертвовав процессор (1 ядро или столько, сколько захотите). Это просто:
cd cppcheck/
virtualenv .env
.env/bin/pip install -r tools/donate-cpu-requirements.txt
.env/bin/python tools/donate-cpu.py
Скрипт проанализирует исходный код Debian и загрузит результаты на сервер cppcheck. Эти результаты нужны нам как для улучшения Cppcheck, так и для обнаружения регрессий.
Вы можете остановить скрипт в любой момент, нажав Ctrl C.
Для Cppcheck требуется компилятор C++ с (частичной) поддержкой C++11. Минимальные необходимые версии: GCC 5.1/Clang 3.5/Visual Studio 2015.
Чтобы создать приложение с графическим интерфейсом, вам необходимо использовать систему сборки CMake.
При создании инструмента командной строки PCRE не является обязательным. Он используется, если вы строите по правилам.
Существует несколько вариантов компиляции:
Минимальная необходимая версия Python — 3.6.
Минимальная необходимая версия — CMake 3.5.
Пример компиляции Cppcheck с помощью cmake:
mkdir build
cd build
cmake ..
cmake --build .
Если вы хотите скомпилировать графический интерфейс, вы можете использовать флаг. -DBUILD_GUI=ВКЛ.
Для поддержки правил (требуется pcre) используйте флаг. -DHAVE_RULES=ВКЛ.
Для выпускных сборок рекомендуется использовать: -DUSE_MATCHCOMPILER=ON
Для построения тестов используйте флаг. -DBUILD_TESTS=ВКЛ.
Используя cmake, вы можете создавать файлы проектов для Visual Studio, XCode и т. д.
Для генераторов с одной конфигурацией (например, «Unix Makefiles») вы можете сгенерировать и построить конкретную конфигурацию (например, «RelWithDebInfo»), используя:
mkdir build_RelWithDebInfo
cd build_RelWithDebInfo
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
cmake --build . --config RelWithDebInfo
Для генераторов с несколькими конфигурациями (например, «Visual Studio 17 2022») то же самое достигается с помощью:
mkdir build
cd build
cmake ..
cmake --build . --config RelWithDebInfo
Используйте файл cppcheck.sln. Файл настроен для Visual Studio 2019, но набор инструментов платформы можно легко изменить на более старые или новые версии. Решение содержит целевые платформы как для x86, так и для x64.
Для компиляции с правилами выберите конфигурацию «Release-PCRE» или «Debug-PCRE». Ожидается, что pcre.lib (pcre64.lib для сборок x64) и pcre.h будут находиться в /externals. Текущую версию PCRE для Visual Studio можно получить с помощью vcpkg.
Если вы не хотите использовать интегрированную среду разработки Visual Studio, вы можете скомпилировать cppcheck из командной строки следующей командой.
msbuild cppcheck.sln
Установите MSYS2, чтобы получить набор инструментов GNU с g++ и gdb (https://www.msys2.org/). Создайте файл settings.json в папке .vscode со следующим содержимым (при необходимости измените путь):
{
"terminal.integrated.shell.windows": "C:\msys64\usr\bin\bash.exe",
"terminal.integrated.shellArgs.windows": [
"--login",
],
"terminal.integrated.env.windows": {
"CHERE_INVOKING": "1",
"MSYSTEM": "MINGW64",
}
}
Запустите «make» в терминале, чтобы собрать cppcheck.
Для отладки создайте файл launch.json в папке .vscode со следующим содержимым, в котором описана конфигурация для отладки cppcheck и misra.py:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "cppcheck",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/cppcheck.exe",
"args": [
"--dump",
"${workspaceFolder}/addons/test/misra/misra-test.c"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "misra.py",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/addons/misra.py",
"console": "integratedTerminal",
"args": [
"${workspaceFolder}/addons/test/misra/misra-test.c.dump"
]
}
]
}
PCRE dll необходима для создания CLI. Его можно скачать здесь: http://software-download.name/pcre-library-windows/.
Простая, неоптимизированная сборка (без зависимостей):
make
Рекомендуемая сборка выпуска:
make MATCHCOMPILER=yes FILESDIR=/usr/share/cppcheck HAVE_RULES=yes CXXFLAGS= " -O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function "
Флаги:
MATCHCOMPILER=yes
Python используется для оптимизации cppcheck. Шаблоны Token::Match преобразуются в код C++ во время компиляции.
FILESDIR=/usr/share/cppcheck
Укажите папку, в которую установлены файлы cppcheck (аддоны, cfg, платформа)
HAVE_RULES=yes
Включить правила (при использовании требуется PCRE)
CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function"
Включает большинство оптимизаций компилятора, отключает внутренний код отладки cppcheck и включает основные предупреждения компилятора.
Если вы просто хотите собрать Cppcheck без зависимостей, вы можете использовать эту команду:
g++ -o cppcheck -std=c++11 -Iexternals -Iexternals/simplecpp -Iexternals/tinyxml2 -Iexternals/picojson -Ilib cli/ * .cpp lib/ * .cpp externals/simplecpp/simplecpp.cpp externals/tinyxml2/ * .cpp
Если вы хотите использовать --rule
и --rule-file
, тогда необходимы зависимости:
g++ -o cppcheck -std=c++11 -lpcre -DHAVE_RULES -Ilib -Iexternals -Iexternals/simplecpp -Iexternals/tinyxml2 cli/ * .cpp lib/ * .cpp externals/simplecpp/simplecpp.cpp externals/tinyxml2/ * .cpp
mingw32-make
Если вы столкнулись со следующей ошибкой с MATCHCOMPILER=yes
вам необходимо указать интерпретатор Python через PYTHON_INTERPRETER
.
process_begin: CreateProcess(NULL, which python3, ...) failed.
makefile:24: pipe: No error
process_begin: CreateProcess(NULL, which python, ...) failed.
makefile:27: pipe: No error
makefile:30: *** Did not find a Python interpreter. Stop.
sudo apt-get install mingw32
make CXX=i586-mingw32msvc-g++ LDFLAGS= " -lshlwapi " RDYNAMIC= " "
mv cppcheck cppcheck.exe
Помимо создания самостоятельной платформы по вашему выбору, существует также несколько способов получить готовые пакеты.
Примечание. Пакеты, отличные от Windows, обслуживаются не командой Cppcheck, а соответствующими упаковщиками.
yum
, apt
, pacman
и т. д.). См. https://pkgs.org/search/?q=cppcheck для обзора.brew
). См. https://formulae.brew.sh/formula/cppcheck#default. https://cppcheck.sourceforge.io/