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的自动跳转功能实际上是基于关键词匹配,并不是真正分析了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特性:
跳转到符号和头文件功能也都能正常使用。