AIoT应用创新大赛-用 CLion 获取更好的代码补全与跳转体验
背景
在官网教程中有几个 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 成功但是无法自动跳转,自动补全功能也不全。复制全量的编译脚本到源码目录工作量太大,故考虑使用编译数据库的方式。
相关文章
- Redis常见问题答疑
- redis 问答
- Redis变慢了,你会怎么排查
- VSLAM系列原创02讲 | ORB描述子如何实现旋转不变性?原理+代码
- redis相关问题汇总
- 生存分析——泊松回归(LightGBM)实现生存分析(四)
- springboot 整合redis实现分布式session
- 因果推断笔记——因果图建模之微软开源的dowhy(一)
- Mysql用户与权限操作
- Mysql视图
- Flink 使用窗口结果
- Flink —— 状态
- spring security5.x OAuth2 使用REDIS管理分布式客户端授权信息
- Python selenium 发送长文本卡顿问题
- 安装docker并使用docker安装mysql
- MySQL explain使用以及EXTRA类型解读
- MySQL关联表插入数据(insert into select语法)
- MySQL学习笔记(长期更新)
- extjs7 classic actioncolumn 根据数据disable按钮
- MySQL 关联查询规范