ปล่อยหน้าต่าง | OSS-ฟัซ | สถานะการสร้างการสแกนความครอบคลุม | รวมสิ่งที่คุณใช้ | ใบอนุญาต |
---|---|---|---|---|
ชื่อเดิมของโปรแกรมนี้คือ "C++check" แต่ต่อมาได้เปลี่ยนเป็น "Cppcheck"
แม้จะมีชื่อนี้ Cppcheck ได้รับการออกแบบมาสำหรับทั้ง C และ C++
มีคู่มือออนไลน์
Cppcheck เป็นโครงการงานอดิเรกที่มีทรัพยากรจำกัด คุณสามารถช่วยเราได้ด้วยการบริจาค CPU (1 core หรือมากเท่าที่คุณต้องการ) มันง่าย:
cd cppcheck/
virtualenv .env
.env/bin/pip install -r tools/donate-cpu-requirements.txt
.env/bin/python tools/donate-cpu.py
สคริปต์จะวิเคราะห์ซอร์สโค้ดเดเบียนและอัปโหลดผลลัพธ์ไปยังเซิร์ฟเวอร์ cppcheck เราต้องการผลลัพธ์เหล่านี้เพื่อปรับปรุง Cppcheck และตรวจจับการถดถอย
คุณสามารถหยุดสคริปต์ได้ทุกเมื่อที่ต้องการด้วย Ctrl C
Cppcheck ต้องการคอมไพเลอร์ C++ พร้อมการสนับสนุน (บางส่วน) C++11 เวอร์ชันขั้นต่ำที่ต้องการคือ GCC 5.1 / Clang 3.5 / Visual Studio 2015
ในการสร้างแอปพลิเคชัน GUI คุณต้องใช้ระบบการสร้าง CMake
เมื่อสร้างเครื่องมือบรรทัดคำสั่ง PCRE เป็นทางเลือก มันถูกใช้หากคุณสร้างตามกฎเกณฑ์
มีตัวเลือกการรวบรวมหลายแบบ:
เวอร์ชัน Python ขั้นต่ำที่ต้องการคือ 3.6
เวอร์ชันขั้นต่ำที่ต้องการคือ CMake 3.5
ตัวอย่างการคอมไพล์ Cppcheck ด้วย cmake:
mkdir build
cd build
cmake ..
cmake --build .
หากคุณต้องการคอมไพล์ GUI คุณสามารถใช้แฟล็กได้ -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 builds) และ pcre.h คาดว่าจะอยู่ใน /externals PCRE เวอร์ชันปัจจุบันสำหรับ Visual Studio สามารถรับได้โดยใช้ vcpkg
หากคุณไม่ต้องการใช้ Visual Studio IDE คุณสามารถคอมไพล์ cppcheck จากบรรทัดคำสั่งด้วยคำสั่งต่อไปนี้
msbuild cppcheck.sln
ติดตั้ง MSYS2 เพื่อรับ GNU toolchain ด้วย 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 (addons, cfg, แพลตฟอร์ม)
HAVE_RULES=yes
เปิดใช้งานกฎ (จำเป็นต้องใช้ PCRE หากใช้)
CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function"
เปิดใช้งานการปรับแต่งคอมไพเลอร์ส่วนใหญ่ ปิดใช้งานโค้ดดีบัก cppcheck-internal และเปิดใช้งานคำเตือนคอมไพเลอร์พื้นฐาน
หากคุณต้องการสร้าง 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/