janelas de lançamento | OSS Fuzz | Status de compilação da verificação de cobertura | inclua o que você usa | Licença |
---|---|---|---|---|
O nome original deste programa era "C++check", mas posteriormente foi alterado para "Cppcheck".
Apesar do nome, Cppcheck foi projetado para C e C++.
Um manual está disponível online.
Cppcheck é um projeto hobby com recursos limitados. Você pode nos ajudar doando CPU (1 núcleo ou quantos quiser). É simples:
cd cppcheck/
virtualenv .env
.env/bin/pip install -r tools/donate-cpu-requirements.txt
.env/bin/python tools/donate-cpu.py
O script analisará o código-fonte do Debian e enviará os resultados para um servidor cppcheck. Precisamos desses resultados tanto para melhorar o Cppcheck quanto para detectar regressões.
Você pode interromper o script sempre que quiser com Ctrl C.
Cppcheck requer um compilador C++ com suporte (parcial) a C++11. As versões mínimas exigidas são GCC 5.1/Clang 3.5/Visual Studio 2015.
Para construir o aplicativo GUI, você precisa usar o sistema de construção CMake.
Ao construir a ferramenta de linha de comando, PCRE é opcional. É usado se você construir com regras.
Existem várias opções de compilação:
A versão mínima necessária do Python é 3.6.
A versão mínima necessária é CMake 3.5.
Exemplo, compilando Cppcheck com cmake:
mkdir build
cd build
cmake ..
cmake --build .
Se você deseja compilar a GUI, você pode usar o sinalizador. -DBUILD_GUI=ON
Para suporte de regras (requer pcre), use o sinalizador. -DHAVE_RULES=ON
Para compilações de lançamento, é recomendado usar: -DUSE_MATCHCOMPILER=ON
Para construir os testes use o sinalizador. -DBUILD_TESTS=ON
Usando cmake você pode gerar arquivos de projeto para Visual Studio, XCode, etc.
Para geradores de configuração única (como "Unix Makefiles") você pode gerar e construir uma configuração específica (por exemplo, "RelWithDebInfo") usando:
mkdir build_RelWithDebInfo
cd build_RelWithDebInfo
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
cmake --build . --config RelWithDebInfo
Para geradores de múltiplas configurações (como "Visual Studio 17 2022") o mesmo é conseguido usando:
mkdir build
cd build
cmake ..
cmake --build . --config RelWithDebInfo
Use o arquivo cppcheck.sln. O arquivo está configurado para Visual Studio 2019, mas o conjunto de ferramentas da plataforma pode ser facilmente alterado para versões mais antigas ou mais recentes. A solução contém destinos de plataforma para x86 e x64.
Para compilar com regras, selecione a configuração "Release-PCRE" ou "Debug-PCRE". Espera-se que pcre.lib (pcre64.lib para compilações x64) e pcre.h estejam em /externals então. Uma versão atual do PCRE para Visual Studio pode ser obtida usando vcpkg.
Se não desejar usar o IDE do Visual Studio, você pode compilar cppcheck a partir da linha de comando o seguinte comando.
msbuild cppcheck.sln
Instale o MSYS2 para obter o conjunto de ferramentas GNU com g++ e gdb (https://www.msys2.org/). Crie um arquivo settings.json na pasta .vscode com o seguinte conteúdo (ajuste o caminho conforme necessário):
{
"terminal.integrated.shell.windows": "C:\msys64\usr\bin\bash.exe",
"terminal.integrated.shellArgs.windows": [
"--login",
],
"terminal.integrated.env.windows": {
"CHERE_INVOKING": "1",
"MSYSTEM": "MINGW64",
}
}
Execute “make” no terminal para construir o cppcheck.
Para depuração, crie um arquivo launch.json na pasta .vscode com o seguinte conteúdo, que cobre a configuração para depuração de cppcheck e 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"
]
}
]
}
A dll PCRE é necessária para construir a CLI. Ele pode ser baixado aqui: http://software-download.name/pcre-library-windows/
Compilação simples e não otimizada (sem dependências):
make
A versão de lançamento recomendada é:
make MATCHCOMPILER=yes FILESDIR=/usr/share/cppcheck HAVE_RULES=yes CXXFLAGS= " -O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function "
Bandeiras:
MATCHCOMPILER=yes
Python é usado para otimizar cppcheck. Os padrões Token::Match são convertidos em código C++ em tempo de compilação.
FILESDIR=/usr/share/cppcheck
Especifique a pasta onde os arquivos cppcheck estão instalados (addons, cfg, plataforma)
HAVE_RULES=yes
Habilitar regras (PCRE é necessário se for usado)
CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function"
Ativa a maioria das otimizações do compilador, desativa o código de depuração interno do cppcheck e ativa avisos básicos do compilador.
Se você deseja apenas construir o Cppcheck sem dependências, você pode usar este comando:
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
Se você quiser usar --rule
e --rule-file
então são necessárias dependências:
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
Se você encontrar o seguinte erro com MATCHCOMPILER=yes
você precisa especificar seu interpretador 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
Além de construir você mesmo na plataforma de sua escolha, também existem diversas maneiras de obter pacotes pré-construídos.
Nota: Os pacotes não Windows não são mantidos pela equipe Cppcheck, mas pelos respectivos empacotadores.
yum
, apt
, pacman
, etc.). Consulte https://pkgs.org/search/?q=cppcheck para obter uma visão geral.brew
). Consulte https://formulae.brew.sh/formula/cppcheck#default. https://cppcheck.sourceforge.io/