CLion 2026.2 Help

编译数据库

如果您正在处理的项目不是基于 CMake、 Gradle或 Makefiles ,您仍然可以利用 CLion 提供的高级 IDE 功能。 一种方法是 导入非 CMake 项目,并让 CLion 将其转换为简单的 CMake 结构。 另一种选择是通过加载其 编译数据库 来打开项目。

编译数据库使 CLion 能够检测项目文件并提取所有必要的编译器信息,例如包含路径和编译标志。 这种方法使您能够在 IDE 中操作并充分体验其功能,同时保持项目 独立于 CMake、Makefile 或 Gradle。

一个 编译数据库是一个 JSON 格式的文件,名为 compile_commands.json ,包含有关项目中每个编译单元的结构化数据。

以下代码片段显示了一个 JSON 编译数据库的示例:

{ "directory": "/Users/me/prj/Calendar/", "command": "/usr/local/bin/g++-7 -I/Users/me/prj/Calendar/calendars -g -std=c++11 -o calendar_run.dir/main.cpp.o -c /Users/me/prj/Calendar/main.cpp", "file": "/Users/me/prj/Calendar/main.cpp" }, { "directory": "/Users/me/prj/Calendar/calendars", "command": "/usr/local/bin/g++-7 -I/Users/me/prj/Calendar/calendars -g -std=c++11 -o calendars.dir/calendar_defs.cpp.o -c /Users/me/prj/Calendar/calendars/calendar_defs.cpp", "file": "/Users/me/prj/Calendar/calendars/calendar_defs.cpp" }

您可以看到一个名为 命令对象的条目数组。 每个 命令对象表示翻译单元的主要 文件 、工作 目录 、实际编译 命令 (或 实参 的列表),以及可选的由编译步骤创建的 output 的名称。 有关格式的更多信息,请参阅 官方文档。

生成编译数据库

要为您的项目获取编译数据库,您有多种选择:它可以由编译器、构建系统和专用工具生成(请参阅 扩展的变体列表)。 以下是一些示例:

CMake:

  • 使用 CMAKE_EXPORT_COMPILE_COMMANDS标志。 您可以运行

    cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .

    或将以下行添加到您的 CMakeLists.txt脚本中:

    set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

    compile_commands.json 文件将被放入构建目录中。

Clang(版本 5.0 及更高版本):

  • -Mj选项为每个输入文件写入一个编译条目。 您可以对项目中的每个文件使用它,然后将输出合并为 JSON 格式的编译数据库(请参阅 过程示例)。

Ninja(版本 1.2 及更高版本):

  • 要获取编译数据库,请使用 -t compdb选项。 请注意,它需要规则名称作为参数: -t compdb rule1 rule2... 规则列表在 Ninja 构建文件(默认名称 构建.ninja )中提供,例如:

    rule cc command = gcc -c -o $out $in description = CC $out rule link command = gcc -o $out $in description = LINK $out

    如果只有一个规则名为 cc 的情况下生成编译数据库,请指定:

    -t compdb cc > compile_commands.json

    但对于多个规则,您需要从构建文件中获取其确切名称并将其传递给 compdb (请参阅 可能的解决方案之一)。

基于 Make 的项目:

Bear 和 intercept-构建 工具:

  • Bear 和 intercept-构建 来自 scan-构建 的工具可通过拦截构建期间的编译器调用来帮助您获取编译数据库。

SourceTrail Visual Studio 扩展:

在 CLion 中使用编译数据库

一旦为您的项目创建了编译数据库,您就可以在 CLion 中开始使用它。

加载项目

  1. 从主菜单中选择 文件 | 打开。

  2. 找到 compile_commands.json 文件或包含它的目录,然后点击 打开。

  3. 点击 作为项目打开:

    打开编译数据库项目
  4. CLion 将检测项目文件并在 构建 工具窗口中显示 compile_commands.json 中所有命令的状态:

    编译数据库项目

    此时,CLion 的代码洞察、重构、分析和导航功能已完全可用于您的项目。

检查工具链

  1. 转到 设置 | 构建、执行、部署 | 编译数据库

  2. 选择用于解析项目文件的工具链:

    编译数据库的工具链

    CLion 会从 设置 | 构建、执行、部署 | 工具链 提供所有可用的工具链。 请注意, 远程主机 工具链目前不支持编译数据库项目。

更改项目根目录

默认情况下,项目根目录设置为包含编译数据库文件的目录。 然而,这并不总是方便的:例如,如果某些项目文件位于包含 compile_commands.json 的目录之外(即项目根目录之外),这些文件将被列在树中,而不考虑实际的文件夹结构。 在这种情况下,您需要将项目根目录设置为包含 compile_commands.json 和项目文件的父目录。

  1. 要更改项目根目录,请从主菜单中选择 工具 | 编译数据库 | 更改项目根目录 ,并为项目根目录设置新位置。

配置自动重新加载

默认情况下,CLion 不会在 compile_commands.json 中发生更改时自动重新加载您的项目,除非是 VCS 更新等外部事件。 您可以在 构建工具 设置中更改此行为。

  1. 转到 设置 | 构建、执行、部署 | 构建工具。

  2. 选择一个自动重新加载选项:

    自动重新加载设置
    • 任何更改 - 项目将在 compile_commands.json 中的任何更改时触发重新加载。

    • 外部更改 (默认)- 您的项目仅在外部事件(如 VCS 更新)时重新加载。 如果 compile_commands.json 中发生其他更改,您需要手动重新加载项目。 使用以下选项之一:

      • 请按 Ctrl+Shift+O

      • 点击编辑器中出现的弹出窗口:

        用于重新加载项目的编辑器弹出窗口
      • 点击 重新导入编译数据库项目 在 构建 工具窗口中:

        重新导入项目图标
      • 从主菜单中选择 工具 | 编译数据库 | 重新加载编译数据库项目。

在 compile_database.json 中的代码辅助功能

CLion 原生支持 JSON 文件格式,因此您可以直接在 IDE 中编辑 compile_database.json 文件,并提供高亮和代码补全帮助:

在 compile_database.json 中的代码补全

CLion 检查您的 compile_database.json 文件是否符合编译数据库 JSON 模式。 您可以在 设置 | 编辑器 | 检查 | JSON 和 JSON5 中调整相应的检查。

针对 compile_database.json 的 JSON 检查

编译单个文件

尽管 CLion 尚未实现编译数据库项目的构建功能,但您可能会发现检查单个文件的更改而无需构建整个项目非常有用。 为此,CLion 提供了 重新编译 操作。 它适用于单个源文件和头文件,也适用于在项目树中选择的文件组。 对于头文件,CLion 使用解析上下文来编译包含指定头文件的源文件之一。 请注意, 重新编译 对目录和非 C/C++ 文件是禁用的。

  • 要为当前打开的文件调用 重新编译 ,请从主菜单中选择 构建 | 重新编译 或按下 Ctrl+Shift+F9。

  • 对于项目树中的文件,请在上下文菜单中使用 重新编译 选项(或按相同的 Ctrl+Shift+F9 键)。

  • 要重新编译多个文件,请在项目树中选择它们,并在上下文菜单中使用 重新编译选定的文件 选项 Ctrl+Shift+F9。 请注意,当用于多个文件时,重新编译将在第一个编译失败时停止。

当您 重新编译 一个文件时,CLion 从 compile_commands.json 中相应的 命令对象 提取必要信息:编译命令行(但 CLion 会抑制输出并移除指定输出文件的标志)以及要使用的编译器。

将目录标记为..

标记目录为 操作也适用于您的编译数据库项目。 在项目树中选择一个目录,右键点击它,然后选择 标记目录为 操作。

有关用例描述和更多关于 CLion 如何处理标记目录的详细信息,请参阅 外部源文件 部分。

构建并运行

编译数据库本身缺少 构建、运行和调试 应用程序所需的数据。 但是,您可以通过为编译数据库项目添加 自定义构建目标 ,并为这些目标创建 自定义运行/调试配置来设置工作流程。

2026年 7月 15日