编译数据库
如果您正在处理的项目不是基于 CMake、 Gradle或 Makefiles ,您仍然可以利用 CLion 提供的高级 IDE 功能。 一种方法是 导入非 CMake 项目,并让 CLion 将其转换为简单的 CMake 结构。 另一种选择是通过加载其 编译数据库 来打开项目。
编译数据库使 CLion 能够检测项目文件并提取所有必要的编译器信息,例如包含路径和编译标志。 这种方法使您能够在 IDE 中操作并充分体验其功能,同时保持项目 独立于 CMake、Makefile 或 Gradle。
一个 编译数据库是一个 JSON 格式的文件,名为 compile_commands.json ,包含有关项目中每个编译单元的结构化数据。
以下代码片段显示了一个 JSON 编译数据库的示例:
您可以看到一个名为 命令对象的条目数组。 每个 命令对象表示翻译单元的主要 文件 、工作 目录 、实际编译 命令 (或 实参 的列表),以及可选的由编译步骤创建的 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 及更高版本):
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 的项目:
compiledb-generator 工具为基于 make 的构建系统创建编译数据库。
Bear 和 intercept-构建 工具:
SourceTrail Visual Studio 扩展:
SourceTrail 扩展 为 Visual Studio 解决方案 生成编译数据库。
在 CLion 中使用编译数据库
一旦为您的项目创建了编译数据库,您就可以在 CLion 中开始使用它。
加载项目
请选择 从主菜单。
找到 compile_commands.json 文件或包含它的目录,然后点击 打开。
点击 作为项目打开:

CLion 将检测项目文件并在 构建 工具窗口中显示 compile_commands.json 中所有命令的状态:

此时,CLion 的代码洞察、重构、分析和导航功能已完全可用于您的项目。
检查工具链
转到
选择用于解析项目文件的工具链:

CLion 会从 提供所有可用的工具链。 请注意, 远程主机 工具链目前不支持编译数据库项目。
更改项目根目录
默认情况下,项目根目录设置为包含编译数据库文件的目录。 然而,这并不总是方便的:例如,如果某些项目文件位于包含 compile_commands.json 的目录之外(即项目根目录之外),这些文件将被列在树中,而不考虑实际的文件夹结构。 在这种情况下,您需要将项目根目录设置为包含 compile_commands.json 和项目文件的父目录。
要更改项目根目录,请从主菜单中选择 ,并为项目根目录设置新位置。
配置自动重新加载
默认情况下,CLion 不会在 compile_commands.json 中发生更改时自动重新加载您的项目,除非是 VCS 更新等外部事件。 您可以在 构建工具 设置中更改此行为。
转到 。
选择其中一个自动重新加载选项:

任何更改 - 项目将在 compile_commands.json 中的任何更改时触发重新加载。
外部更改 (默认)- 您的项目仅在外部事件(如 VCS 更新)时重新加载。 如果 compile_commands.json 中发生其他更改,您需要手动重新加载项目。 使用以下选项之一:
请按 Ctrl+Shift+O
点击编辑器中出现的弹出窗口:

点击
在 构建 工具窗口中:

请选择 从主菜单。
在 compile_database.json 中的代码辅助功能
CLion 原生支持 JSON 文件格式,因此您可以直接在 IDE 中编辑 compile_database.json 文件,并提供高亮和代码补全功能以供帮助:

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

编译单个文件
尽管 CLion 尚未实现编译数据库项目的构建功能,但您可能会发现检查单个文件的更改而无需构建整个项目非常有用。 为此,CLion 提供了 重新编译 操作。 它适用于单个源文件和头文件,也适用于在项目树中选择的文件组。 对于头文件,CLion 使用解析上下文来编译包含指定头文件的源文件之一。 请注意, 重新编译 对目录和非 C/C++ 文件是禁用的。
要为当前打开的文件调用 重新编译 ,请从主菜单中选择 或按下 Ctrl+Shift+F9。
对于项目树中的文件,请在上下文菜单中使用 重新编译 选项(或按相同的 Ctrl+Shift+F9 键)。
要重新编译多个文件,请在项目树中选择它们,并在上下文菜单中使用 重新编译选定的文件 选项 Ctrl+Shift+F9。 请注意,当用于多个文件时,重新编译将在第一个编译失败时停止。
当您 重新编译 一个文件时,CLion 从 compile_commands.json 中相应的 命令对象 提取必要信息:编译命令行(但 CLion 会抑制输出并移除指定输出文件的标志)以及要使用的编译器。
将目录标记为..
将目录标记为 操作也适用于您的编译数据库项目。 在项目树中选择一个目录,右键点击它,然后选择 将目录标记为 操作。
有关用例描述和更多关于 CLion 如何处理标记目录的详细信息,请参阅 外部源文件 部分。
构建并运行
编译数据库本身缺少 构建、运行和调试 应用程序所需的数据。 但是,您可以通过为编译数据库项目添加 自定义构建目标 ,并为这些目标创建 自定义运行/调试配置来设置工作流程。