深入解析:vscode + cmake + ninja+ gcc 搭建MCU开发环境

news/2025/10/5 12:50:19/文章来源:https://www.cnblogs.com/slgkaifa/p/19126478

深入解析:vscode + cmake + ninja+ gcc 搭建MCU开发环境

vscode+ cmake + ninja+ gcc 搭建MCU开发环境

1. 前言

接触过 MCU 开发的同学基本上对于Keil、IAR这一类的集成IDE 软件并不陌生。

使用这类软件好处当然显而易见:快速上手,一键编译,一键下载,一键仿真运行等等,大家只需将注意力焦注于如何编写好用且优雅的机制代码即可,至于代码是如何编译,如何生成bin文件完全不用关系。

那么使用这类软件有什么坏处吗?为什么需要去研究另外一些编译方式呢?直接用不香吗?这样做肯定是有原因的!使用上述IDE存在如下问题:

  1. 公司使用,公司小规模的时候没人管你,等你业务做大了,公司体量做大了,就开始有人来查水表了,毕竟这个时候由于计划周期、进度等等一系列因素,临时换炮肯定来不及,那购买License的概率就大幅提高了就是正版应该License!尽管网上破解教程一大把,破解也很简单,甚至清楚的人都知道,这个破解软件大概率还是官方供应的~,因此个人启用没有挑战,但是如果你

  2. 不具备跨平台属性,此类 IDE 基本都是只有windows版本,但是作为嵌入式开发的,又有几个人能避免 linux 这个开发环境的? 类似 CI 这种通常部署在 linux 环境上,不可避免代码要在 linux 上能编起来,甚至能在 linux 上直接开发

  3. “效率较低",当然这需要打一个双引号,因为这是相对的,开发软件发展至今,传统的这种 IDE 相对于近几年发展出来的主力,类似于VScode 这类开发软件,传统IDE界面过于朴素,复杂代码跳转等都不是很方便,且Vscode 承受大量插件,甚至AI辅助编码,研发的时候该选哪个不用多说了

那么本文将详细描述如何采用 vscode + cmake + ninja + gcc 搭建 MCU 的制作环境,学习一下另外一种开发 MCU 的新方式!

2. 工具安装及介绍

2.1 gcc

2.1.1 gcc 介绍

准确来说应该是 gcc-arm-none-eabi

使用 keil 的时候,keilarm 公司开发的一款集成上位机图形化编辑软件,点击某些按钮之后,其底下也就是执行对应的指令,调用相关编译器进行编译罢了,而 keil 调用的编译器叫做 armcc,这是 arm 自家开发的,不开源,因此需要征收 license 费用。gccarmcc 一样是一种编译器,干同样的是,但是 gcc 开源,因此可以免费使用。

gcc 是一种编译器,主要用来编译,比如 linux 系统也是使用 gcc 进行编译。gcc 会根据不同的处理器架构有不同的 gcc 版本,我们需要根据可执行程序执行所在的cpu架构平台选择对应版本的 gcc

举个例子:在linux上编译出用于在 linux 上执行的可执行程序使用 gcc 版本 与 在 linux 上编译出用于在 mcu 上执行的可执行程序的 gcc 版本就不一样,不同的 gcc 版本对应可执行程序所运行的 cpu 处理器架构的不同。

在就是上述讲到的是,大家应该根据可执行程序(即编译产物)执行所在的cpu平台架构选择对应版本的 gcc,但编译出来的产物需要放到对应的cpu架构平台才能执行而已!就是大家的电脑上允许下载每一个版本的 gcc ,并进行编译,只【补充:当然需要根据电脑的系统(Windows or Linux or MAC)选择下载对应系统版本的】

同样的,对于 mcu 这类处理器不具备运行 gcc 进行编译的能力,因此需要借助电脑先对源码执行编译,生产可以在 mcu 平台执行的可执行程序,也即 bin 文件,之后再将此 bin 档案下载传输到 mcu 内运行。因此对应可以编译出在mcu平台运行的可执行程序的编译器叫做交叉编译器此编译器在windows 或 Linux 或 Mac 上运行,进行代码编译,产物在 mcu 上运行。

2.1.2 gcc 下载及安装

gcc 可从官网上直接下载:gcc-arm-none-eabi-10.3-2021.10-win32.zip

在这里插入图片描述选择自己对应的体系版本的 gcc 即可,像windows 要是下载的是可执行程序,直接安装就行,若是下载的是 zip,解压后将解压之后的bin 文件夹目录下的路径【注意是arm-none-eabi-gcc所在的路径】 添加到框架环境变量,linux、mac同理,关于如何添加环境变量可自行上网查阅。

安装成功之后,重新打开一个命令行窗口或 bash,执行 arm-none-eabi-gcc --version 可以查看到对应版本则说明安装成功。

在这里插入图片描述

⚠️ 不同 gcc 版本编译出来的bin文件大小和内容会有些许差异,因此多人协同开发时,建议采用同一版本!⚠️

2.2 ninja

2.2.1 ninja 介绍

ninja 是 google 公司开发的一款构建系统,一款小巧的专注于编译速度而生从构建环境!
在这里插入图片描述
为什么 Google 要开发这么个东西呢?因为 make 太慢了!

对于小型系统体验不到,当工程比较大的时候,你执行下 make 指令,重新构建+编译等个半小时,你能受得了?因此 Google 的大佬开发了 ninja,它功能和 make 一样,但是比 make 快,它的优点就是:快!

2.2 ninja 安装

ninja 在 github 上直接开源,下载地址:ninja-github
在这里插入图片描述
根据自己的电脑系统选择对应的平台的压缩包即可。

下载完成之后解压到某个目录,之后将对应目录添加到环境变量,同样怎么添加环境变量自行上网查阅。

在这里插入图片描述

环境变量添加好之后,重新打开一个新的命令行终端或者bash,执行 ninja --version 查看是否安装成功。

在这里插入图片描述

2.3 cmake

2.3.1 cmake 介绍

make 工具需要依赖 makefile 文件进行构建,而 ninja 同样也依赖 build.ninja 文件。

makefile 的语法已经比较晦涩了,感兴趣可以看我之前写过的一篇博文《Makefile入门到精通》,虽然晦涩难懂,但是多啃啃还是能啃下去,而 ninja 语法那就是天书,人家设计的时候可能也本没想着让大家去自行书写吧,反正我是没写过~

在这里插入图片描述

cmake 的主场了。就是聪明的大佬们总会想办法给自己偷懒减负,因此写个软件直接生成这复杂的 build.ninja 描述文件不就好了,语法再弄的简便点,容易学一点,剩下的就剩解bug了~,因此就

cmake 依赖于 CMakeLists.txt 文件,简单的功能比较好懂的,它不仅能直接生成 makefile,之后调用make进行编译;也能生成 build.ninja 之后调用 ninja 进行编译。且 cmake 工具同样具备跨平台属性!

具体cmake的语法在这就不多叙述了,感兴趣可以自行上网查阅,嗯,你必须感兴趣的…

2.3.2 cmake 安装

直接去官网下载最新版即可:cmake

在这里插入图片描述
同样根据自己系统进行选择,下载源文件和或者安装镜像都行,同样的,下载安装镜像的时候勾选自动添加到环境变量下载源文件,解压之后记得添加对应目录到环境变量!

安装好之后,重新打开一个命令行窗口或bash窗口,执行 cmake --version 确认是否ok
在这里插入图片描述

2.4 VScode

这个太有名气了吧,自行上网安装就好了!新手的话记得上网搜下 Vscode 推荐的插件,没有插件的 vscode 就是毛胚房,有了插件你可以是豪宅~

3. 上手体验

至此,应用都装好了,怎么也得来试试好不好用感受下吧!那么直接上手一种最为快速的体验感受感受吧!

最为快速的那还的是stm32搭配 cubemx 了,过气的 stm32 依然是最佳的选择,下载安装stm32 CubeMX,根据电脑系统自行选择了!

毕竟 cubemx 可以直接生成 cmake 版本工程,暂时可以免去写 cmake 文件了!

在这里插入图片描述
tips:最新版本强制登陆了,有点离谱~

安装好之后,随便选择一款 MCU,容易配个时钟,配个SWD调试口就差不多了,当然手上有开发板那就根据开发板的来了!

在这里插入图片描述
在这里插入图片描述

生成工程的时候选择利用 cmake!!!

在这里插入图片描述

之后使用 vscode 打开生成好的工程文件夹,如下图所示:
在这里插入图片描述

在 vscode 内打开终端,推荐 git bash 终端,linux风格比较好用!

  1. 执行 cmake -B out -GNinja 调用 cmake 生成 ninja 构建系统

  2. 执行 ninja -C out 进行编译

  3. 对于最新版本的 CubeMx 生成的 cmake 版本工程,使用老版本 gcc 编译的时候会报错:non constant or forward reference address expression for section .ARM.extab

  4. 编译完成之后,在 out 目录下可以看到 test.elf 文件,此文件即为编译产物,如果生成文件需要 .bin 或者 .hex 文件,需要修改下 CMakeLists.txt,以后再补充吧,axf文件也可以使用 ozone 这类软件下载了,或者调用 arm-none-eabi-gcc 自行生成一下也可以,命令自行AI~
    在这里插入图片描述

4. 总结

以上便是使用 vscode + cmake + ninja + gcc 搭建完整的 mcu 开发环境的全部步骤了,体验完应该许可开始淘汰传统的 IDE 了,当然对于如何完善cmake,以及生成的 bin 文件后续怎么烧录,怎么仿真这些本文还未涉及,后续再补充啦,关注专栏后续不断更新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设知名企业wordpress文章页添加小工具

说明:本文是七月算法5月深度学习班第五次课听课笔记。黄色标注的部分为自己不太确定的部分。 训练 mini-batch SGD 神经网络使用mini-batch SGD训练得到最优权重。训练过程如下:(以下参考了andrew ng的机器学习课程)例如训练样本…

2025 年 AI 应用数据泄露防范:以“流式网关”为中枢的链路化治理与合规映射

2025 年 AI 应用数据泄露防范:以“流式网关”为中枢的链路化治理与合规映射AI 原生应用把“数据—模型—业务”三条链路深度耦合,泄露与越权从“点状事件”转为“链路型、低信号、渐进式”攻击:提示词注入→RAG 越权…

安装飞牛os出现452错误的解决方法

安装飞牛os出现452错误的解决方法最近尝试飞牛os系统,按照官网的安装教程,选择Graphical Install安装时出现452:out of range pointer错误。 最先尝试用ventoy做引导盘,能启动并进行安装,但却无法正常引导系统。 …

郑州春蕾网站建设仿站小工具下载

虚拟内存是一种对主存的抽象概念。 (1)将主存看作一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式高效地使用内存 (2)为每…

高性能网站建设进阶...在线网站建设询问报价

摘要:偶然机会接触到python语音,感觉语法简单、功能强大,刚好朋友分享了一个网课《python 爬虫与数据可视化》,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个部分(1.pyth…

已备案网站新增接入wordpress 文章空白页

本周重点 ①Linux系统提权 ②Linux权限维持 ③Windows 提权 ④Windows权限维持 ⑤SSRF利用 ⑥内网环境 ⑦内网扫描 ⑧漏洞利用 ⑨内网代理 ⑩获取主机控制权其他方案 ⑩①vuln靶场 ⑩②CS代理与ICMP隧道 本周主要内容 ①Linux系统提权 系统提权是成功入侵系统之…

Alexa进入自主时代:AI技术新突破

文章探讨了Alexa语音助手在人工智能领域的技术演进,重点介绍了自我感知、自主学习和自助服务三大技术方向,包括常识推理、多轮对话状态跟踪、少样本学习等核心技术突破,展示了AI系统向更自主化发展的技术路径。Alex…

淮北市住房和城乡建设局网站html5韩国网站模板

当在 Java 项目中使用 Redis 时,特别是在 Spring Boot 项目中使用 Redis,下面是一个详细的教程,涵盖了 Redis 的配置和使用。 在 Spring Boot 项目中配置和使用 Redis 步骤 1:添加 Redis 依赖 在你的 Spring Boot 项目的 pom.x…

铜仁市网站建设情况南京微网站开发

功能描述:开发一个类似于 Windows 命令行提示符或 Linux 命令行终端的应用程序 一、最终演示效果 QtCmd 不是因为它是 Qt 的组件,而是采用 Qt 开发了一个类似 Windows 命令提示符或者 Linux 命令行终端的应用程序,故取名为 QtCmd。 上述演示…

入门AJAX——XMLHttpRequest(Get) - 教程

入门AJAX——XMLHttpRequest(Get) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

知识付费网站搭建微信营销的功能

前段时间,写程序时,出了错误,竟然没有想到是自己属性命名的问题,哎~~~真是一定要注意规范呀,在这里我从网上找了些,规范作为参考 Sun 推荐的命名规范 1 ,类名要首字母大写,后面的单词…

公司网站php天河网站建设哪家好

文章目录 1. TSP案例引入2. 考虑惰性约束的求解效率对比2.1 求解基础TSP模型2.2 基于SCIP的Conshdlr添加惰性约束1. TSP案例引入 在运筹学建模和求解过程中,“lazy constraints”(惰性约束)是一种动态添加约束的策略,松弛部分约束后求解得到的“可行解”,不断地进行可行性…

ROM和RAM

1.1计算机中有两种存储器 (1)内存:内存与CPU接轨比较紧密,内存可以被CPU直接访问,内存可按照字节单位来随机访问,程序运行时离不开内存,程序中的变量都是定义在内存中,内存受限于物理技术和成本,容量比较小而…

深入解析:C#学习26天:内存优化的几种方法

深入解析:C#学习26天:内存优化的几种方法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

电子商务网站建设 代码学校诗歌网站建设

在存在缓存的情况下,删除较前的slide,会出现当前slide与后一个slide重复出现的情况 假设当前存在5个slide,且这5个slide已缓存,则删除slide2后,仍为5个slide,且slide2的内容变为slide3的内容,此…

老板合作网站开发网销怎么做

日常工作中经常需要确定各个指标的权重,利用熵值法确定权重属于客观赋权法,从数据出发,避免过强的主观性,但是也同时带来了一些问题。在某个论坛的帖子中,作者提出了这样的一个问题:“熵值法用于确定权重是…

整理数据制作 直方图,箱须图,概率密度估计(KDE)图

1.导入库和设置 import math import numpy as np import matplotlib.mlab as mlab import matplotlib.pyplot as plt plt.rcParams[font.sans-serif]=[SimHei] # 设置中文字体,作用设置 matplotlib 使用中文字体显示…

云原生应用架构设计原则与落地实践:从理念到便捷的方法论

云原生应用架构设计原则与落地实践:从理念到便捷的方法论pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

做装饰公司网站6wordpress添加直达链接

问题描述:边缘计算设备是什么意思。 问题解答: 边缘计算(Edge Computing)是一种计算模型,其主要思想是在距离数据产生源头更近的地方进行数据处理和计算,而不是将所有数据传输到远程云服务器进行处理。边…