fenêtres de publication | OSS-Fuzz | État de construction de l'analyse de couverture | inclure ce que vous utilisez | Licence |
---|---|---|---|---|
Le nom original de ce programme était « C++check », mais il a ensuite été changé en « Cppcheck ».
Malgré son nom, Cppcheck est conçu à la fois pour C et C++.
Un manuel est disponible en ligne.
Cppcheck est un projet de loisir avec des ressources limitées. Vous pouvez nous aider en faisant don de CPU (1 cœur ou autant que vous le souhaitez). C'est simple :
cd cppcheck/
virtualenv .env
.env/bin/pip install -r tools/donate-cpu-requirements.txt
.env/bin/python tools/donate-cpu.py
Le script analysera le code source Debian et téléchargera les résultats sur un serveur cppcheck. Nous avons besoin de ces résultats à la fois pour améliorer Cppcheck et pour détecter les régressions.
Vous pouvez arrêter le script quand vous le souhaitez avec Ctrl C.
Cppcheck nécessite un compilateur C++ avec prise en charge (partielle) de C++11. Les versions minimales requises sont GCC 5.1 / Clang 3.5 / Visual Studio 2015.
Pour créer l'application GUI, vous devez utiliser le système de construction CMake.
Lors de la création de l'outil de ligne de commande, PCRE est facultatif. Il est utilisé si vous construisez avec des règles.
Il existe plusieurs choix de compilation :
La version Python minimale requise est 3.6.
La version minimale requise est CMake 3.5.
Exemple, compilation de Cppcheck avec cmake :
mkdir build
cd build
cmake ..
cmake --build .
Si vous souhaitez compiler l'interface graphique, vous pouvez utiliser le drapeau. -DBUILD_GUI=ON
Pour la prise en charge des règles (nécessite pcre), utilisez le flag. -DHAVE_RULES=ON
Pour les versions release, il est recommandé d'utiliser : -DUSE_MATCHCOMPILER=ON
Pour construire les tests, utilisez le drapeau. -DBUILD_TESTS=ON
En utilisant cmake, vous pouvez générer des fichiers de projet pour Visual Studio, XCode, etc.
Pour les générateurs à configuration unique (comme les "Makefiles Unix"), vous pouvez générer et construire une configuration spécifique (par exemple "RelWithDebInfo") en utilisant :
mkdir build_RelWithDebInfo
cd build_RelWithDebInfo
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
cmake --build . --config RelWithDebInfo
Pour les générateurs multi-configurations (comme « Visual Studio 17 2022 »), la même chose est obtenue en utilisant :
mkdir build
cd build
cmake ..
cmake --build . --config RelWithDebInfo
Utilisez le fichier cppcheck.sln. Le fichier est configuré pour Visual Studio 2019, mais l'ensemble d'outils de la plateforme peut être facilement modifié vers des versions plus anciennes ou plus récentes. La solution contient des cibles de plate-forme pour x86 et x64.
Pour compiler avec des règles, sélectionnez la configuration "Release-PCRE" ou "Debug-PCRE". pcre.lib (pcre64.lib pour les versions x64) et pcre.h devraient alors être dans /externals. Une version actuelle de PCRE pour Visual Studio peut être obtenue à l'aide de vcpkg.
Si vous ne souhaitez pas utiliser l'IDE Visual Studio, vous pouvez compiler cppcheck à partir de la ligne de commande la commande suivante.
msbuild cppcheck.sln
Installez MSYS2 pour obtenir la chaîne d'outils GNU avec g++ et gdb (https://www.msys2.org/). Créez un fichier settings.json dans le dossier .vscode avec le contenu suivant (ajustez le chemin si nécessaire) :
{
"terminal.integrated.shell.windows": "C:\msys64\usr\bin\bash.exe",
"terminal.integrated.shellArgs.windows": [
"--login",
],
"terminal.integrated.env.windows": {
"CHERE_INVOKING": "1",
"MSYSTEM": "MINGW64",
}
}
Exécutez "make" dans le terminal pour créer cppcheck.
Pour le débogage, créez un fichier launch.json dans le dossier .vscode avec le contenu suivant, qui couvre la configuration pour le débogage de cppcheck et 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"
]
}
]
}
La DLL PCRE est nécessaire pour créer la CLI. Il peut être téléchargé ici : http://software-download.name/pcre-library-windows/
Construction simple et non optimisée (pas de dépendances) :
make
La version recommandée est :
make MATCHCOMPILER=yes FILESDIR=/usr/share/cppcheck HAVE_RULES=yes CXXFLAGS= " -O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function "
Drapeaux :
MATCHCOMPILER=yes
Python est utilisé pour optimiser cppcheck. Les modèles Token::Match sont convertis en code C++ au moment de la compilation.
FILESDIR=/usr/share/cppcheck
Spécifie le dossier où les fichiers cppcheck sont installés (addons, cfg, plateforme)
HAVE_RULES=yes
Activer les règles (PCRE est requis si cela est utilisé)
CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function"
Active la plupart des optimisations du compilateur, désactive le code de débogage interne à cppcheck et active les avertissements de base du compilateur.
Si vous souhaitez simplement créer Cppcheck sans dépendances, vous pouvez utiliser cette commande :
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
Si vous souhaitez utiliser --rule
et --rule-file
, des dépendances sont nécessaires :
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
Si vous rencontrez l'erreur suivante avec MATCHCOMPILER=yes
vous devez spécifier votre interpréteur Python via 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
En plus de vous construire sur la plateforme de votre choix, il existe également plusieurs façons d'obtenir des packages pré-construits.
Remarque : Les packages non Windows ne sont pas gérés par l'équipe Cppcheck mais par les packageurs respectifs.
yum
, apt
, pacman
, etc.). Voir https://pkgs.org/search/?q=cppcheck pour un aperçu.brew
). Voir https://formulae.brew.sh/formula/cppcheck#default. https://cppcheck.sourceforge.io/