zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

AIoT应用创新大赛-用 CLion 获取更好的代码补全与跳转体验

2023-04-18 16:13:13 时间

背景

官网教程中有几个 NXP RT1062 的 demo 工程,用推荐的 MCUXpresso IDE 试了下还是比较容易上手的,但美中不足的是编辑功能不够强大。

IDE 提供了很多嵌入式开发的必备功能,如编译工具链、代码编辑器、调试器、固件下载工具,但在代码编辑器上较为薄弱,主要体现在无法自动补全,即输入函数开始的几个字符,自动补全函数名(IDE 可以实现函数跳转,但自动补全功能需要输入.号或::号触发,对嵌入式 c 编程用处不大)。

平时编码大多采用 CLion,所以考虑换用 CLion 作为代码编辑器(vscode 也可以,更好的代码补全功能需要 clangd 支持),其他功能嵌入式特有的功能(编译、调试)使用官方 IDE。

实现步骤

用 MCUXpresso IDE 生成 makefile

C/C++ 工程目前有两种流行的构建方式:make 或者 cmake,在嵌入式编程中以 make 为主。换用编辑器时,必须存在 makefile 才能找到头文件路径、源码路径、链接库路径,进而做代码分析以便支持代码跳转与补全。

打开示例工程,点击构建项目,IDE 会生成 makefile,如下图所示:

生成编译数据库

编译数据库是一个 json 文件,详细描述了工程的编译步骤以及源码路径,在大型工程中可以实现精准的代码补全与跳转。make 工程与 cmake 工程均可以生成编译数据库,并在 CLion 或者 vscode 应用编译数据库。

首先安装 compiledb 工具

 pip3 install compiledb

在 makefile 所在的目录下运行命令,就会在当前目录下生成 compile_commands.json

 compiledb -n make

编译数据库的文件内容示意如下:

因为 makefile 默认用 arm-none-eabi-gcc 工具链,在 CLion 中暂时未找到支持方法,故可通过批量替换为 gcc的方式避免加载工程出错。

用 CLion 打开工程

因为该 makefile 以项目根目录为基准,所以可以直接拷贝 compile_commands.json 到项目根目录,然后用 CLion 打开该 json 文件,会提示 open as project,随后就能索引所有符号,并带来比较完善的代码补全、跳转功能。

Q&A

为什么不在 CLion 中直接使用 makefile

CLion 确实已经支持了 makefile 工程,但不支持 MCUXpresso IDE 生成的 makfile。

观察 MCUXpresso IDE 的构建过程,发现是 makefile 文件在 工程根目录/Debug目录下,而且该目录仅有构建所需的脚本,没有源码。使用 CLion(2021.2 版本)打开项目目录后,打开 makefile 文件,选择 load makefile,load 成功但是无法自动跳转,自动补全功能也不全。复制全量的编译脚本到源码目录工作量太大,故考虑使用编译数据库的方式。