# 对编译语言进行 CodeQL 代码扫描

了解如何 CodeQL 分析已编译的语言、可用的生成选项，并了解如果需要，如何自定义数据库生成过程。

## 关于 CodeQL 分析工作流程 和编译语言

Code scanning 通过针对一个或多个 CodeQL 数据库运行查询来工作。 每个数据库都包含仓库中代码的单一语言表示形式。 对于已编译的语言 C/C++、C#、Go、Java、Kotlin、Rust、和 Swift，填充此数据库的过程通常涉及生成代码和提取数据。

启用 code scanning时，默认设置和高级设置都使用最简单的方法生成一个 CodeQL 数据库进行分析。 对于 C/C++、C#， Java和 Rust，CodeQL 数据库从代码库中直接生成，而不需要构建（`none` 构建模式）。 对于其他已编译语言，CodeQL 会使用 `autobuild` 生成模式来构建代码库。 或者，也可以使用 `manual` 生成模式明确指定生成命令，以仅分析这些自定义命令生成的文件。

可以使用依赖项缓存与CodeQL一起将依赖项存储为GitHub Actions缓存，而不是从注册表中下载依赖项。 请参阅本文后面的[关于 CodeQL 的依赖项缓存](#about-dependency-caching-for-codeql)。

## CodeQL 生成模式

该 CodeQL 操作支持三种不同的编译语言生成模式：

* `none`
  CodeQL- 数据库直接从代码库创建，而无需构建代码库（支持所有的解释语言，并且还支持C/C++、C#， Java和 Rust）。
* `autobuild`

- CodeQL检测最可能的构建方法，并使用该方法尝试构建代码库，并为分析创建一个数据库（C/C++、C#、Go、Java、Kotlin 和 Swift支持）。

* `manual` - 你在工作流中定义用于代码库的构建步骤（支持 C/C++、C#、Go、Java、Kotlin 和 Swift）。

有关与语言相关的`autobuild`行为、运行程序要求和手动构建指南，请参阅[已编译语言的 CodeQL 生成选项和步骤](/zh/code-security/reference/code-scanning/codeql/build-options-for-compiled-languages)。

## 关于 CodeQL 的依赖项缓存

可以使用依赖项缓存与CodeQL一起将依赖项存储为GitHub Actions缓存，而不是从注册表中下载依赖项。 这降低了在第三方注册表运行不佳时丢失警报的风险，而且对于具有大量依赖项或使用速度较慢的注册表的项目而言，还可能会提高性能。 若要详细了解缓存依赖项如何加速工作流的内容，请参阅 [依赖项缓存参考](/zh/actions/reference/workflows-and-actions/dependency-caching)。

依赖项缓存适用于所有生成模式，并且受 Java、Go 和 C#支持。

> \[!NOTE]
> 使用依赖项缓存将存储 CodeQL特定缓存，这些缓存将受到存储库的缓存配额的约束。 请参阅“[依赖项缓存参考](/zh/actions/reference/workflows-and-actions/dependency-caching#usage-limits-and-eviction-policy)”。