CLion 2019.3帮助

编译数据库

编译数据库为项目格式

对于非CMake和非Gradle项目,您仍然可以从CLion提供的高级IDE功能中受益。一种方法是导入非CMake项目,然后让CLion将其转换为简单的CMake结构。另一种选择是通过加载项目的编译数据库来打开项目。

使用编译数据库,CLion可以检测项目文件并提取所有必需的编译器信息,例如包含路径和编译标志。这种方法使您可以在IDE中进行操作并获得其功能的完整体验,同时使您的项目独立于CMake或Gradle。

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

以下代码段显示了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“}

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

生成编译数据库

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

CMake的:

  • 使用CMAKE_EXPORT_COMPILE_COMMANDS标志。你可以跑

    cmake -DCMAKE_EXPORT_COMPILE_COMMANDS =打开...
    将以下行添加到您的CMakeLists.txt脚本中:
    设置(CMAKE_EXPORT_COMPILE_COMMANDS ON)
    compile_commands.json文件将放入构建目录。

Clang(5.0及更高版本):

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

忍者(1.2版及更高版本):

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

    规则cc命令= gcc -c -o $ out $ in描述= CC $ out规则链接命令= gcc -o $ out $ in描述= LINK $ out
    在仅命名一个规则的情况下生成编译数据库cc ,请指定:
    -t compdb cc> compile_commands.json
    但是对于多个规则,您需要从构建文件中获取它们的确切名称,并将它们传递给compdb (请参阅可能的解决方案之一 )。

基于Make的项目:

Bear和拦截构建工具:

  • scan-build进行Bearintercept-build是通过在构建过程中拦截编译器调用来帮助您获得编译数据库的工具。

SourceTrail Visual Studio扩展:

在CLion中使用编译数据库

载入专案

为项目创建编译数据库后,可以将其加载到CLion中。导航到文件|在主菜单上打开 ,选择compile_commands.json文件或包含该文件的目录,然后单击Open as Project

结果,检测到项目文件,并且compile_commands.json中所有命令的状态显示在图标工具Windows工具WindowBuild 构建工具窗口:

编译数据库项目

现在,CLion的代码洞察力,重构,分析和导航功能可完全用于您的项目。

CLion本机支持JSON文件格式,因此您可以直接在IDE中编辑compile_database.json文件,并突出显示和完成代码以寻求帮助。此外,CLion还检查compile_database.json文件与编译数据库JSON模式的符合性。例如,它会在命令条目中缺少属性或使用错误类型时发出通知:

验证编译数据库文件

更改项目根目录

默认情况下,项目根目录设置为包含编译数据库文件的目录。但是,这并不总是很方便:例如,如果某些项目文件位于带有compile_commands.json的目录之外(即,不在项目根目录下),则无论实际的文件夹结构如何,此类文件都会在树中列出。在这种情况下,您需要将项目根目录设置为包含compile_commands.json和项目文件的父目录。

要更改项目根目录,请选择“ 工具” |“工具”。编译数据库|从主菜单更改“项目根目录 ”,并为项目根目录提供其他位置。

自动导入和重新加载项目

要使compile_command.json中的每次更改都自动重新加载项目, “设置” /“首选项” |“设置”设置“ 使用自动导入”复选框。 构建,执行,部署|编译数据库 。如果取消选中此复选框,则在对编译数据库文件进行任何修改后,都会显示一条弹出消息,提示您导入更改:

cl compdb importpopup

您也可以使用“ 工具” |重新加载编译数据库项目”操作。编译数据库菜单可在需要时手动刷新项目。

编译一个文件

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

要为当前打开的文件调用“重新编译 ”,请选择“ 生成” |“新建”。从主菜单重新编译 (或按Ctrl+Shift+F9 )。对于项目树中的文件,请使用右键单击菜单中的“重新编译”选项(或按相同的Ctrl+Shift+F9键)。要重新编译几个文件,请在项目树中选择它们,然后使用右键单击菜单中的“重新编译所选文件”选项Ctrl+Shift+F9 。请注意,当用于多个文件时,重新编译将在第一次编译失败时停止。

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

将目录标记为。

标记目录为”操作也可用于您的编译数据库项目。在“项目工具”窗口中选择一个目录,右键单击它,然后选择“将目录标记为操作”。有关用例的描述以及有关CLion如何处理已标记目录的更多详细信息,请参阅“将目录标记为... ”部分。

构建并运行

编译数据库本身缺少构建,运行和调试应用程序所需的数据。但是,可以通过为编译数据库项目添加自定义构建目标并为这些目标创建自定义运行/调试配置来设置工作流程。
上次修改时间:2019年12月1日