Release-Windows | OSS-Fuzz | Build-Status des Coverity-Scans | Schließen Sie ein, was Sie verwenden | Lizenz |
---|---|---|---|---|
Der ursprüngliche Name dieses Programms war „C++check“, später wurde er jedoch in „Cppcheck“ geändert.
Trotz des Namens ist Cppcheck sowohl für C als auch für C++ konzipiert.
Ein Handbuch ist online verfügbar.
Cppcheck ist ein Hobbyprojekt mit begrenzten Ressourcen. Sie können uns helfen, indem Sie CPU spenden (1 Kern oder so viele Sie möchten). Es ist einfach:
cd cppcheck/
virtualenv .env
.env/bin/pip install -r tools/donate-cpu-requirements.txt
.env/bin/python tools/donate-cpu.py
Das Skript analysiert den Debian-Quellcode und lädt die Ergebnisse auf einen CPPCheck-Server hoch. Wir benötigen diese Ergebnisse sowohl zur Verbesserung von Cppcheck als auch zur Erkennung von Regressionen.
Sie können das Skript jederzeit mit Strg C stoppen.
Cppcheck erfordert einen C++-Compiler mit (teilweiser) C++11-Unterstützung. Die mindestens erforderlichen Versionen sind GCC 5.1 / Clang 3.5 / Visual Studio 2015.
Um die GUI-Anwendung zu erstellen, müssen Sie das CMake-Build-System verwenden.
Beim Erstellen des Befehlszeilentools ist PCRE optional. Es wird verwendet, wenn Sie mit Regeln erstellen.
Es gibt mehrere Kompilierungsoptionen:
Die mindestens erforderliche Python-Version ist 3.6.
Die mindestens erforderliche Version ist CMake 3.5.
Beispiel, Cppcheck mit cmake kompilieren:
mkdir build
cd build
cmake ..
cmake --build .
Wenn Sie die GUI kompilieren möchten, können Sie das Flag verwenden. -DBUILD_GUI=ON
Für die Regelunterstützung (erfordert PCRE) verwenden Sie das Flag. -DHAVE_RULES=EIN
Für Release-Builds wird die Verwendung von -DUSE_MATCHCOMPILER=ON empfohlen
Verwenden Sie zum Erstellen der Tests die Flagge. -DBUILD_TESTS=ON
Mit cmake können Sie Projektdateien für Visual Studio, XCode usw. generieren.
Für Einzelkonfigurationsgeneratoren (wie „Unix Makefiles“) können Sie eine bestimmte Konfiguration (z. B. „RelWithDebInfo“) generieren und erstellen, indem Sie Folgendes verwenden:
mkdir build_RelWithDebInfo
cd build_RelWithDebInfo
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
cmake --build . --config RelWithDebInfo
Für Multikonfigurationsgeneratoren (wie „Visual Studio 17 2022“) wird dasselbe erreicht mit:
mkdir build
cd build
cmake ..
cmake --build . --config RelWithDebInfo
Verwenden Sie die Datei cppcheck.sln. Die Datei ist für Visual Studio 2019 konfiguriert, das Plattform-Toolset kann jedoch problemlos auf ältere oder neuere Versionen umgestellt werden. Die Lösung enthält Plattformziele für x86 und x64.
Um mit Regeln zu kompilieren, wählen Sie die Konfiguration „Release-PCRE“ oder „Debug-PCRE“. pcre.lib (pcre64.lib für x64-Builds) und pcre.h werden sich dann voraussichtlich in /externals befinden. Eine aktuelle Version von PCRE für Visual Studio kann mit vcpkg bezogen werden.
Wenn Sie die Visual Studio-IDE nicht verwenden möchten, können Sie cppcheck mit dem folgenden Befehl über die Befehlszeile kompilieren.
msbuild cppcheck.sln
Installieren Sie MSYS2, um die GNU-Toolchain mit g++ und gdb zu erhalten (https://www.msys2.org/). Erstellen Sie im .vscode-Ordner eine Datei „settings.json“ mit folgendem Inhalt (passen Sie den Pfad nach Bedarf an):
{
"terminal.integrated.shell.windows": "C:\msys64\usr\bin\bash.exe",
"terminal.integrated.shellArgs.windows": [
"--login",
],
"terminal.integrated.env.windows": {
"CHERE_INVOKING": "1",
"MSYSTEM": "MINGW64",
}
}
Führen Sie „make“ im Terminal aus, um cppcheck zu erstellen.
Erstellen Sie zum Debuggen eine launch.json-Datei im Ordner .vscode mit dem folgenden Inhalt, der die Konfiguration für das Debuggen von cppcheck und misra.py abdeckt:
{
// 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"
]
}
]
}
Die PCRE-DLL wird zum Erstellen der CLI benötigt. Es kann hier heruntergeladen werden: http://software-download.name/pcre-library-windows/
Einfacher, nicht optimierter Build (keine Abhängigkeiten):
make
Der empfohlene Release-Build ist:
make MATCHCOMPILER=yes FILESDIR=/usr/share/cppcheck HAVE_RULES=yes CXXFLAGS= " -O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function "
Flaggen:
MATCHCOMPILER=yes
Python wird zur Optimierung von cppcheck verwendet. Die Token::Match-Muster werden zur Kompilierungszeit in C++-Code konvertiert.
FILESDIR=/usr/share/cppcheck
Geben Sie den Ordner an, in dem Cppcheck-Dateien installiert sind (Addons, CFG, Plattform).
HAVE_RULES=yes
Regeln aktivieren (PCRE ist erforderlich, wenn dies verwendet wird)
CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function"
Aktiviert die meisten Compiler-Optimierungen, deaktiviert den cppcheck-internen Debugcode und aktiviert grundlegende Compiler-Warnungen.
Wenn Sie Cppcheck nur ohne Abhängigkeiten erstellen möchten, können Sie diesen Befehl verwenden:
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
Wenn Sie --rule
und --rule-file
verwenden möchten, sind Abhängigkeiten erforderlich:
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
Wenn bei MATCHCOMPILER=yes
der folgende Fehler auftritt, müssen Sie Ihren Python-Interpreter über PYTHON_INTERPRETER
angeben.
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
Neben dem Aufbau auf der Plattform Ihrer Wahl gibt es auch mehrere Möglichkeiten, vorgefertigte Pakete zu erhalten.
Hinweis: Die Nicht-Windows-Pakete werden nicht vom Cppcheck-Team gepflegt, sondern von den jeweiligen Paketierern.
yum
, apt
, pacman
usw.) an. Eine Übersicht finden Sie unter https://pkgs.org/search/?q=cppcheck.brew
). Siehe https://formulae.brew.sh/formula/cppcheck#default. https://cppcheck.sourceforge.io/