STM32 CubeMX Makefile 工程编译 入门指南

本文面向Makefile 纯新手,从零讲解:CubeMX 生成 Makefile 工程所需的环境、工具选择、安装配置、环境变量设置、工程编译全流程。全程使用官方工具、无冗余操作,看完即可独立完成编译。


前言

STM32 CubeMX 可以直接生成 Makefile 工程 ,无需安装 Keil、STM32CubeIDE 等大型 IDE,仅通过轻量命令行工具即可完成代码编译,生成可烧录的固件(.bin/.hex)。

这套方案体积小、跨平台、行业通用,是嵌入式开发必备基础技能。


一、Makefile 基础介绍

1. 什么是 Makefile?

Makefile 是一个编译规则脚本文件 ,它里面写好了代码如何编译、文件如何链接、输出固件的全套规则。

我们不需要手写复杂的编译命令,只需要执行一个 make 指令,工具就会自动按照 Makefile 的规则完成编译。

2. Makefile 在 STM32 开发中的作用

  • 读取 CubeMX 生成的工程配置
  • 自动调用编译器处理 C 代码、汇编文件
  • 自动生成 STM32 可运行的固件文件
  • 一键编译、一键清理编译产物

3. 核心分工(必记)

  • Makefile = 施工图纸
  • make 工具 = 指挥官(执行图纸)
  • ARM 编译器 = 工人(真正编译代码)

二、编译 STM32 Makefile 工程的必备条件

Windows 系统原生不支持 Makefile 编译,必须安装两个核心工具:

  1. 必选 :ARM 官方交叉编译器(arm-none-eabi-gcc)→ 把 C 代码编译成 STM32 固件
  2. 二选一:Make 构建工具 → 执行 Makefile 脚本(Windows 无自带,需手动安装)

三、工具选择推荐

方案对比(根据需求二选一/或者都选择)

工具类型 推荐工具 特点 适合人群
Make 工具 (二选一) xpack-windows-build-tools 轻量(几MB)、开箱即用、无冗余、嵌入式专用 只做 STM32 开发,追求极简
MSYS2 + MinGW64 make 通用型、功能全、可拓展其他开发 想兼顾其他编程学习
编译器(必选) arm-gnu-toolchain (arm-none-eabi-gcc) ARM 官方、适配所有 STM32 芯片 所有开发者

四、官方下载链接

1. ARM 官方编译器(必装)

https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

选择:arm-gnu-toolchain-15.2.rel1-mingw-w64-i686-arm-none-eabi.zip

(1)网页中下滑,找到合适的版本下载内容:

2. 轻量 Make 工具(方案一,简洁解压即用)

https://github.com/xpack-dev-tools/windows-build-tools-xpack/releases

下载:xpack-windows-build-tools-4.4.1-3-win32-x64.zip

(1)直接下载最新版压缩包:

3. MSYS2(方案二,通用型)

https://www.msys2.org/

下载:Windows 64 位安装包

(1)直接下载最新版exe安装包:


五、工具安装与配置

第一部分:安装 ARM 编译器(必装)

将下载的 zip 压缩包:arm-gnu-toolchain-15.2.rel1-mingw-w64-i686-arm-none-eabi.zip

解压到无中文、无空格的路径

示例:C:\Programs\arm-gnu-toolchain-15.2.rel1-mingw-w64-i686-arm-none-eabi


第二部分:安装 Make 工具(二选一)

方案 A:xpack 轻量版(推荐新手)
  1. 下载的 zip 压缩包:xpack-windows-build-tools
  2. 解压到无中文、无空格的路径
    示例:C:\Programs\xpack-windows-build-tools-4.4.1-3
  3. 该工具无需安装,解压即用
方案 B:MSYS2 版(通用型)
  1. 安装 MSYS2,路径无中文、无空格
  2. 安装完成后,打开 MSYS2 MINGW64 终端
  1. 执行命令(复制粘贴,回车运行):
bash 复制代码
# 第一步:更新包管理器
pacman -Syu
  1. 若终端自动关闭,重新打开 MSYS2 MINGW64,执行:
bash 复制代码
# 第二步:补全更新
pacman -Su
  1. 安装 make 工具(仅安装需要的工具,不装冗余内容):
bash 复制代码
# 第三步:安装 mingw32-make
pacman -S mingw-w64-x86_64-make
  1. 出现提示输入 y 回车,等待安装完成

六、系统环境变量配置

环境变量的作用:让系统在任意目录都能找到编译工具。

1. 打开环境变量设置

右键「此电脑」→ 属性 → 高级系统设置 → 环境变量

找到下方 系统变量 → Path → 编辑

2. 添加工具路径(根据你的安装路径修改)

必加:ARM 编译器路径
plain 复制代码
C:\Programs\arm-gnu-toolchain-15.2.rel1-mingw-w64-i686-arm-none-eabi\bin
方案 A:添加 xpack 工具路径
plain 复制代码
C:\Programs\xpack-windows-build-tools-4.4.1-3\bin
方案 B:添加 MSYS2 工具路径
plain 复制代码
C:\Programs\MSYS2\mingw64\bin

3. 保存配置

一路点击 确定,关闭所有窗口(必须保存,否则配置无效)


七、验证工具安装成功(关键步骤)

  1. 打开 CMD 或 PowerShell(快捷键:Win+R 输入 cmd)
  2. 依次输入以下命令,验证工具是否正常:

1. 验证 ARM 编译器

bash 复制代码
arm-none-eabi-gcc -v

✅ 显示版本号 → 成功

2. 验证 Make 工具

方案 A(xpack):
bash 复制代码
make -v
方案 B(MSYS2):
bash 复制代码
mingw32-make -v

✅ 显示版本号 → 成功


八、使用 CubeMX 生成 Makefile 工程

  1. 打开 STM32CubeMX,新建工程,选择你的 STM32 芯片
  2. 完成芯片引脚、时钟、外设配置(常规配置)
  3. 进入 Project Manager 页面
    • Project Name:自定义工程名
    • Project Location:自定义路径
    • Toolchain / IDE :选择 Makefile(核心选项)
  4. 点击右上角 GENERATE CODE,生成工程
  5. 生成完成后,打开工程文件夹,可看到 Makefile 文件

九、命令行编译 STM32 工程

1. 进入工程目录

  1. 打开 CMD
  2. 切换到你的 Makefile 所在目录
    示例:
bash 复制代码
cd C:\Users\Wang2\Desktop\makefile-test\project

2. 执行编译命令

方案 A(xpack 工具):
bash 复制代码
make clean
make
方案 B(MSYS2 工具):
bash 复制代码
mingw32-make clean
mingw32-make

3. 编译成功标志

控制台显示:

plain 复制代码
arm-none-eabi-objcopy build/xxx.elf build/xxx.bin -O binary

✅ 工程目录下会生成 build 文件夹,里面有 .bin/.hex 固件文件

4. 清理编译文件(可选)

bash 复制代码
# xpack 工具
make clean

# MSYS2 工具
mingw32-make clean

十、新手常见问题

  1. 报错:'make' 不是内部或外部命令
    环境变量未配置成功,检查 Path 路径是否正确。
  2. 报错:'arm-none-eabi-gcc' 不是内部或外部命令
    ARM 编译器未安装,或未勾选自动添加环境变量。
  3. 编译失败
    检查工程路径是否包含中文、空格(CubeMX 工程不支持中文路径)。
  4. MSYS2 安装失败
    以管理员身份运行终端,重新执行更新命令。

十一、总结

全套流程一句话概括

  1. 安装 ARM 编译器(真正编译代码)
  2. 安装 Make 工具(执行 Makefile)
  3. 配置环境变量(让系统找到工具)
  4. CubeMX 生成 Makefile 工程
  5. 命令行执行 make / mingw32-make → 一键编译

核心工具关系

  • CubeMX → 生成 Makefile 规则
  • Make 工具 → 指挥官,调度编译流程
  • ARM 编译器 → 工人,生成 STM32 固件

按照本文步骤操作,所有 Windows 电脑都可以快速搭建 STM32 Makefile 编译环境!

相关推荐
喜欢吃燃面2 小时前
Linux 进程间通信:命名管道与 System V 共享内存深度解析
linux·运维·服务器·学习
项目題供诗2 小时前
STM32-新建工程(二)
stm32·单片机·嵌入式硬件
ghie90902 小时前
STM32 待机模式与唤醒实验(标准库函数版)
stm32·单片机·嵌入式硬件
承渊政道2 小时前
【递归、搜索与回溯算法】(递归问题拆解与经典模型实战大秘笈)
数据结构·c++·学习·算法·macos·dfs·bfs
xuhaoyu_cpp_java2 小时前
MySql学习(一)
经验分享·学习·mysql
爱上好庆祝2 小时前
clip-path裁剪,css的滤镜,动画时间线,css的变量和函数
前端·css·学习·html·css3
somi72 小时前
ARM-驱动-06-中断底半部 + ioctl + 原子操作与锁
arm开发·单片机·嵌入式硬件
带娃的IT创业者2 小时前
学习率调度——让学习“先快后慢“
人工智能·深度学习·学习·梯度下降·超参数调优·学习率调度
Simon523142 小时前
路径规划算法学习(RRT、RRT*、Informed RRT*)
学习