Post

Blade项目的IDE支持

Blade是一个C/C++构建工具,详细介绍见Blade构建工具。虽然功能强大,但是缺少IDE支持。本文介绍如何在Blade项目中使用IDE的智能提示、自动补全、自动跳转等特性。

1.VSCode

VSCode的C/C++插件(ms-vscode.cpptools)提供了C/C++代码的智能提示、自动补全和调试等功能。对于Blade项目,该插件将自动检索项目源文件,完成检索后支持

  • 代码智能提示和自动补全
  • 相对于项目根目录或build目录的头文件跳转

自动补全和跳转功能对于普通代码和protobuf生成的代码都可用。

例如,在Blade构建工具第4节的示例项目中:

VSCode自动补全

优点:配置简单,只需安装一个插件。

缺点:

  • VSCode的自动跳转功能实际上是基于关键词匹配,并不是真正分析了C++代码。如果不同文件中有同名的函数则需要手动选择。
  • 对于大型项目,检索过程将会非常慢,导致自动补全功能经常失效,并且内存占用也非常高。

2.CLion

CLion本身只支持Make和CMake两种构建工具。但是,对于不是基于Make或CMake的项目,还可以使用编译数据库(compilation database)来加载,从而能够使用CLion提供的IDE特性,详见文档Compilation database

编译数据库是一个描述编译命令的JSON文件,名为compile_commands.json(可以将其添加到.gitignore,从而避免提交到git)。CLion可以从中提取必要的编译器信息,例如包含路径、编译选项等。幸运的是,Blade使用的底层构建工具Ninja提供了一个工具compdb能够根据BUILD文件生成编译数据库。

仍然以上面的Blade示例项目为例,默认情况下CLion无法进行自动补全和跳转:

无法自动补全

无法跳转到符号

无法跳转到头文件

首先安装CLion。如果代码位于远程开发机上,则参考文档Remote Development连接到远程开发机。

之后按照以下步骤来生成编译数据库,从而启用CLion的IDE功能:

第1步:在命令行中使用blade命令构建需要的目标,目的是生成包含该目标及其所有下游依赖的Ninja构建文件build.ninja,可以使用-n选项避免真正执行编译命令:

1
blade build -n //quick-start:hello_world

构建完成后将在blade-bin目录下生成build.ninja文件。

第2步:使用Ninja的compdb工具生成编译数据库,在项目根目录下执行以下命令:

1
ninja -f blade-bin/build.ninja -t compdb cc cxx cxxhdrs > compile_commands.json

这将在项目根目录下生成compile_commands.json文件。

第3步:使用CLion打开项目,CLion会自动加载compile_commands.json,加载完成后可以在Build窗口中看到成功信息(忽略其中的红字):

导入成功

之后即可使用CLion提供的IDE特性:

CLion自动补全

CLion智能提示

跳转到符号和头文件功能也都能正常使用。

This post is licensed under CC BY 4.0 by the author.