CLion 2025.2 Help

编译数据库

如果您正在处理的项目不是基于 CMakeGradleMakefiles ,您仍然可以利用 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-构建 工具:

  • Bearintercept-构建 来自 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 如何处理标记目录的详细信息,请参阅 外部源文件 部分。

构建并运行

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

最后修改日期: 2025年 9月 26日