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

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

编译数据库是一个名为 compile_commands.json 的 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"
}

您可以看到一个名为 command 对象的条目数组。每个 command 对象表示翻译单元的主文件、工作目录、实际的编译命令(或参数列表)以及可选的编译步骤创建的输出名称。

生成编译数据库

为您的项目获取编译数据库有多种方法:可以由编译器、构建系统和专门的工具。以下是一些示例:

CMake:

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

    cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .

或者在您的 CMakeLists.txt 脚本中添加以下行:

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

compile_commands.json 文件将放置在构建目录中。

CMAKE_EXPORT_COMPILE_COMMANDS 仅由 Makefile 和 Ninja生成器实现。对于其他生成器,此选项会被忽略。

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

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

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

  • 要获取编译数据库,使用 -t compdb 选项。注意,它需要规则名称作为参数:-t compdb rule1 rule2... 规则列表在 Ninja 构建文件(默认名为 build.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-build 工具:

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

SourceTrail Visual Studio 扩展:

  • SourceTrail Extension 为 MS Visual Studio 解决方案 生成编译数据库。

在 CLion 中使用编译数据库

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

加载项目

  1. 从主菜单中选择 File | Open。
  2. 定位 compile_commands.json 文件或包含它的目录,然后点击 Open。
  3. 点击 Open as Project:
    1.png
  4. CLion 将检测项目文件,并在生成工具窗口中显示 compile_commands.json 中所有命令的状态:
    2.png

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

您的项目文件可以位于包含 compile_commands.json 的目录之外。CLion 从编译数据库中提取实际路径并收集项目文件,不考虑它们的位置。

在使用支持版本控制的编译数据库项目时,不要共享 .iml 文件,因为它将在导入时重新生成。

检查工具链

  1. 转到 Settings | Build, Execution, Deployment | Compilation Database。
  2. 选择要用于解析项目文件的工具链:
    3.png

CLion 提供了来自 Settings | Build, Execution, Deployment | Toolchain 的所有可用工具链。请注意,当前不支持远程主机工具链用于编译数据库项目。

请注意,更改工具链需要使用新工具链重新生成 compile_commands.json 文件。

更改项目根目录

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

  • 要更改项目根目录,从主菜单中选择 Tools | Compilation Database | Change Project Root,然后设置新的项目根目录位置。

配置自动重新加载

默认情况下,除了外部事件(如 VCS 更新)之外,CLion 不会在 compile_commands.json 中的更改时自动重新加载您的项目。您可以在生成工具设置中更改此行为。

  1. 转到 Settings | Build, Execution, Deployment | Build Tools。
  2. 选择自动重新加载选项之一:
    4.png

    • Any changes - 项目在 compile_commands.json 中的任何更改都会触发项目重新加载。
    • External changes(默认值)- 您的项目只会在外部事件(如 VCS 更新)时重新加载。如果 compile_commands.json 中发生其他更改,则需要手动重新加载项目。可以使用以下选项之一:

      • 按 CtrlShift0O
      • 单击编辑器中出现的弹出窗口:
        5.png
      • 在生成工具窗口中单击 Reimport Compilation Database Project
        6.png
      • 从主菜单中选择 Tools | Compilation Database | Reload Compilation Database Project。

此设置对每个项目逐个生效。自动重新加载选项应为每个编译数据库、Makefile 或 Gradle 项目单独配置。

编辑 compile_database.json 中的代码助手

CLion 本地支持 JSON 文件格式,因此您可以直接在 IDE 中编辑 compile_database.json 文件,享受高亮和代码补全的帮助:

7.png

CLion 会检查您的 compile_database.json 文件是否符合编译数据库 JSON 模式。您可以在 Settings | Editor | Inspections | JSON 和 JSON5 中调整相应的检查项:

8.png

编译单个文件

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

  • 要在当前打开的文件中调用 Recompile,从主菜单中选择 Build | Recompile,或者按 CtrlShiftF9。
  • 对于项目树中的文件,使用上下文菜单中的 Recompile 选项(或按相同的 CtrlShiftF9 键)。
  • 要重新编译多个文件,请在项目树中选择它们,然后使用上下文菜单中的 Recompile selected files 选项 CtrlShiftF9。请注意,当用于多个文件时,在第一次编译失败后重新编译会停止。

在重新编译文件时,CLion 会从 compile_commands.json 中的相应 command 对象中提取必要的信息:编译命令行(但 CLion 会禁止输出并删除指定输出文件的标志),以及要使用的编译器。

将目录标记为..

Mark Directory as 操作也适用于您的编译数据库项目。在项目树中选择一个目录,右键单击它,然后选择 Mark Directory as 操作。

构建和运行

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

标签: clion破解, clion破解教程, clion教程, clion基础教程, clion高级教程, clion核心教程, clion免费激活码, clion免费注册码, clion注册码在线生成, clion激活