前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AIoT应用创新大赛-用 CLion 获取更好的代码补全与跳转体验

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

原创
作者头像
羽翰尘
发布2021-12-25 15:30:25
1.9K0
发布2021-12-25 15:30:25
举报
文章被收录于专栏:腾讯云IoT腾讯云IoT

背景

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

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

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

实现步骤

用 MCUXpresso IDE 生成 makefile

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

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

image-20211225145946040
image-20211225145946040

生成编译数据库

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

首先安装 compiledb 工具

代码语言:javascript
复制
 pip3 install compiledb

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

代码语言:javascript
复制
 compiledb -n make

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

image-20211225151436913
image-20211225151436913

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

用 CLion 打开工程

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

image-20211225150836895
image-20211225150836895

Q&A

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 实现步骤
    • 用 MCUXpresso IDE 生成 makefile
      • 生成编译数据库
        • 用 CLion 打开工程
        • Q&A
          • 为什么不在 CLion 中直接使用 makefile
          相关产品与服务
          腾讯云代码分析
          腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档