You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SonarQube分析含前置Git子模块的C++项目失败:0编译单元被分析

问题原因及排查方向

核心冲突:Git子模块默认排除规则与目录结构优先级

SonarQube对C++项目的默认扫描逻辑会自动排除Git子模块目录——因为子模块属于独立Git仓库,目录下存在.git标识文件,SonarQube默认会忽略这类目录。

你的问题项目恰好是src目录顶层先放置了两个子模块文件夹,扫描时SonarQube会先识别并排除这两个目录,后续可能因为扫描顺序或逻辑判定(比如认为顶层目录全是排除项,终止后续遍历),没有继续处理子模块之后的非子模块代码目录,最终导致没有找到可分析的C/C++文件。

而正常项目的src目录顶层是非子模块文件夹,SonarQube会先遍历这些目录并识别到可分析文件,后续的子模块目录被排除也不影响整体扫描结果。

验证步骤

  • 查看扫描日志的文件排除模块,确认api_asrcore和api_boost被标记为排除目录。
  • 检查build-wrapper-dump.json内容,确认里面是否包含非子模块代码的编译记录(如果没有,说明编译过程没捕获到这些文件的编译动作,也会导致0文件分析)。
  • 确认非子模块代码目录确实存在未被排除的C/C++源文件。

临时修复方案

  1. 在项目根目录创建sonar-project.properties,显式指定要扫描的目录并明确排除子模块:
    sonar.sources=src/[你的非子模块目录名1],src/[你的非子模块目录名2]
    sonar.exclusions=src/api_asrcore/**,src/api_boost/**
    
  2. 重新执行build-wrapper编译捕获,确保非子模块代码的编译命令被正确记录到build-wrapper-dump.json中。

内容的提问来源于stack exchange,提问作者Tom Penard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:36:32