c++ SonarQube怎么用 c++代码质量管理平台【工具】


SonarQube 依赖外部工具生成编译信息与分析报告,需先用 CMake 等生成 compile_commands.json,再通过 sonar-scanner 配置 sonar.cfamily.compileCommands 等参数上传分析结果;推荐集成 clang-tidy 或 cppcheck 提升检测能力,并在 SonarQube 界面查看质量指标。

SonarQube 本身不直接编译或解析 C++ 源码,它依赖外部构建和静态分析工具(如 clang++、gcc、CMake)生成编译信息(compile_commands.json)和分析报告(如 clang-tidy、cppcheck 输出),再通过 SonarScanner 或 SonarScanner for MSBuild 将结果上传到 SonarQube 服务器进行展示与质量评估。

准备编译数据库(关键第一步)

C++ 项目必须提供准确的编译上下文,SonarQube 才能正确理解头文件路径、宏定义、模板实例化等。推荐使用 CMake 生成 compile_commands.json

  • 在构建目录中运行:cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. && make(Linux/macOS)或 cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. && cmake --build .(Windows)
  • 确认构建目录下生成了 compile_commands.json,且路径无乱码、权限正常
  • 若用 Makefile 或其他构建系统,可用 Bear 工具拦截编译命令生成该文件

配置 SonarScanner 扫描 C++ 项目

下载并解压 SonarScanner CLI,在项目根目录创建 sonar-project.properties

sonar.projectKey=my-cpp-project
sonar.projectName=My C++ Project
sonar.projectVersion=1.0
sonar.sources=src
sonar.cfamily.buildWrapperOutput=.buildwrapper
sonar.cfamily.gcc.reportPath=build/gcc-report.json
sonar.cfamily.cppcheck.reportPath=build/cppcheck-report.xml
sonar.exclusions=**/third_party/**,**/test/**

注意:官方推荐使用 BuildWrapper(仅 Linux/macOS)或 Clang Compilation Database 方式。若用 compile_commands.json,可省略 buildWrapperOutput 行,改用:

立即学习“C++免费学习笔记(深入)”;

  • sonar.cfamily.compileCommands=build/compile_commands.json
  • 确保 sonar-scanner 命令在 build/ 同级目录执行(路径是相对于 scanner 工作目录的)

集成 clang-tidy / cppcheck 提升规则覆盖

SonarQube 自带的 C++ 规则有限(约 100+ 条),需结合主流 linter 增强检测能力:

  • clang-tidy 生成 SARIF 或 JSON 报告:run-clang-tidy -p build/ -export-fixes=clang-tidy-fixes.yaml -format=sarif > clang-tidy.sarif
  • clang-tidy.sarif 路径写入 sonar.cfamily.sarifReportPaths=clang-tidy.sarif
  • cppcheck 可输出 xml:cppcheck --xml --xml-version=2 --enable=all src/ 2> cppcheck-report.xml,再通过 sonar.cfamily.cppcheck.reportPath 引入

启动扫描并查看结果

确保 SonarQube 服务已运行(默认 http://localhost:9000),凭 token 执行:

sonar-scanner \
  -Dsonar.host.url=http://localhost:9000 \
  -Dsonar.token=your_sonarqube_token \
  -Dsonar.login=your_sonarqube_token  # 新版本推荐用 token

扫描完成后,浏览器打开项目主页,即可看到:代码重复率、bug / 漏洞 / 代码异味数量、单元测试覆盖率(需额外配置 gcovr 或 lcov)、技术债务估算等。点击具体问题还能跳转到源码行并显示修复建议。


# linux  # js  # json  # windows  # 浏览器  # app  # 工具  # mac  # c++  # macos  # 解压  # win  # cos  # for  # format  # xml  # Token  # database  # 数据库  # http  # bug  # 推荐使用  # 分析报告  # 成了  # 还能  # 并在  # 或其他  # 自带  # 相对于  # 先用  # 新版本 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Windows执行文件被SmartScreen拦截原因_安全提示与绕过方式  Win11怎么关闭定位服务 Win11禁止应用获取位置信息【隐私】  如何使用Golang实现容器安全扫描_Golang Docker镜像漏洞检测方法  Golang如何测试HTTP中间件_Golang HTTP中间件功能测试实践  Win11蓝牙开关不见了怎么办_Win11蓝牙驱动丢失修复教程【方法】  Win11开机速度慢怎么优化_Win11系统启动加速设置指南【方法】  如何使用Golang template生成文本模板_动态生成HTML或文本  MAC怎么在照片中添加水印_MAC自带编辑工具文字水印叠加【方法】  Windows 11如何开启文件夹加密(EFS)_Windows 11文件属性中加密内容以保护数据  Win11怎么开启空间音效_Windows11耳机杜比音效与Sonic设置  Linux怎么设置磁盘配额_Linux系统Quota安装与用户空间限制【教程】  XAMPP 启动失败(Apache 突然停止)的终极排查与修复指南  如何用::实现单例模式_php静态方法与作用域操作符应用【技巧】  Windows10如何更改鼠标图标_Win10鼠标属性指针浏览  Python如何创建带属性的XML节点  VSC怎么创建PHP项目_从零开始搭建项目的步骤【操作】  如何使用Golang开发简单的聊天室消息存储_Golang WebSocket数据持久化方法  英国搜索:多数英国人认为语言搜索是未来搜索  Win11任务栏怎么调到左边_Win11开始菜单居左设置教程【步骤】  Windows10怎样设置家长控制_Windows10家长控制设置方法【指南】  Mac的“预览”如何合并多个PDF_Mac文件处理技巧【效率】  php修改数据怎么批量改状态_批量更新status字段值技巧【操作】  Windows如何设置登录时的欢迎屏幕背景?(锁屏界面)  如何在 Pandas 中按元素交集合并两列字符串  c++ unordered_map怎么用 c++哈希表用法【教程】  C#怎么使用委托和事件 C# delegate与event编程方法  Win10如何更改任务栏高度_Windows10解锁任务栏调整大小  如何在Golang中捕获结构体方法错误_Golang方法返回error处理实践  Go 中实现 Python urllib.quote() 功能的等效方法  如何在 Go 中创建包含映射(map)的切片(slice)结构  微信企业付款回调PHP怎么接收_处理企业付款异步通知数据教程【教程】  Win11怎么关闭小组件_Win11禁用任务栏天气与小组件方法【设置】  Python深度学习实战教程_神经网络模型构建与训练  如何优化Golang内存分配与GC调度_Golang垃圾回收优化示例  Windows电脑如何截屏?(四种快捷方法)  如何使用Golang log设置日志输出格式_Golang log日志格式示例  c++如何利用doxygen生成开发文档_c++ 代码注释规范与HTML文档导出【案例】  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  VSC怎么配置PHP的Xdebug_远程调试设置步骤【详解】  如何在 Go 中比较自定义的数组类型(如 [20]byte)  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何在Golang中实现CI/CD流水线自动化测试_Golang持续集成测试执行方法  Windows10怎么用“讲述人”读屏辅助 Windows10轻松使用开启讲述人朗读屏幕文字帮助视障用户【教程】  Win11怎么关闭OneDrive同步_Win11取消自动备份文件【教程】  c++如何判断文件是否存在_c++ filesystem库用法  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  Python函数接口稳定性_版本演进解析【指导】  Win11怎么设置任务栏大小_Windows11注册表修改TaskbarSi值  c++ reinterpret_cast怎么用 c++最危险的类型转换【详解】  How to Properly Use NumPy in VS Code 

 2026-01-05

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.