2. 开发环境搭建:Windows/Linux/Mac 下 GCC 工具链安装、环境变量配置、IDE 集成配置
说实话,做嵌入式开发这么多年,我见过太多新手在环境搭建这一步就卡住了。不是装错了版本,就是路径配不对,折腾半天连个 hello world 都跑不起来。这一章,我就把 Windows、Linux、Mac 三个平台下的 GCC 工具链安装、环境变量配置,以及 VS Code、Keil、IAR 的集成配置,一次性给你讲清楚。
核心原则:工具链版本必须与芯片架构匹配。ARM Cortex-M 用 arm-none-eabi-gcc,RISC-V 用 riscv64-unknown-elf-gcc,x86 用普通 gcc。混用必出问题。
2.1 GCC 工具链安装
GCC 工具链,说白了就是一套编译、汇编、链接的工具集合。我习惯把它比作「翻译官」——把 C 代码翻译成芯片能懂的机器码。
2.1.1 Windows 平台
Windows 下我推荐两种方式:
- 直接下载安装包:去 ARM 官网下载 gcc-arm-none-eabi 的 Windows 版 .exe 安装包。安装时记得勾选「Add to PATH」。
- 通过 MSYS2 安装:我个人更推荐这种方式,因为 MSYS2 还能管理其他开发工具。
# MSYS2 安装命令
pacman -S mingw-w64-x86_64-arm-none-eabi-gcc
pacman -S mingw-w64-x86_64-arm-none-eabi-binutils
pacman -S mingw-w64-x86_64-arm-none-eabi-gdb
小技巧:安装完成后,在命令行输入 arm-none-eabi-gcc --version 验证。如果显示版本号,说明装好了。我曾经遇到一个学员,装完死活不显示,最后发现是 PATH 没刷新——重启终端就好了。
2.1.2 Linux 平台
Linux 下安装最简单,包管理器一行命令搞定:
# Ubuntu/Debian
sudo apt-get install gcc-arm-none-eabi
# Fedora/CentOS
sudo dnf install arm-none-eabi-gcc
# Arch Linux
sudo pacman -S arm-none-eabi-gcc
嗯,这里要注意:不同发行版的包名可能略有差异。我曾在 CentOS 7 上踩过坑,默认源里没有 arm-none-eabi-gcc,得先添加 EPEL 源。
2.1.3 Mac 平台
Mac 用户用 Homebrew 最方便:
brew tap ArmMbed/homebrew-formulae
brew install arm-none-eabi-gcc
如果你用的是 M1/M2 芯片,记得确认安装的是 ARM 架构版本。我之前帮一个同事排查问题,他装的是 x86 版本,编译出来的固件在板子上跑不起来——架构不匹配。
2.2 环境变量配置
环境变量配置,说白了就是告诉系统「我的工具链放在哪」。配不好,系统就找不到编译器。
2.2.1 Windows 环境变量
- 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 在「系统变量」中找到
Path,双击编辑 - 添加 GCC 工具链的 bin 目录路径,例如:
C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin - 点击确定保存
避坑指南:我曾经见过有人把路径写成了 C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\,少了 \bin。系统找不到 gcc 可执行文件,编译直接报错。记住:一定要指向 bin 目录。
2.2.2 Linux/Mac 环境变量
编辑 ~/.bashrc 或 ~/.zshrc,添加:
export PATH=$PATH:/usr/local/gcc-arm-none-eabi/bin
然后执行 source ~/.bashrc 使其生效。
验证方法:在任何目录下执行 which arm-none-eabi-gcc,如果返回路径,说明配置成功。如果返回「not found」,检查路径是否写对了。
2.3 IDE 集成配置
IDE 集成,就是把工具链和编辑器、调试器整合在一起。我常用的三个 IDE 各有千秋。
2.3.1 VS Code 集成
VS Code 轻量、免费,插件生态丰富。我现在的项目基本都用它。
- 安装 C/C++ 扩展(Microsoft 官方)
- 安装 Cortex-Debug 扩展(用于调试)
- 配置
c_cpp_properties.json,指定编译器路径
{
"configurations": [
{
"name": "ARM",
"compilerPath": "C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin/arm-none-eabi-gcc.exe",
"intelliSenseMode": "gcc-arm",
"includePath": [
"${workspaceFolder}/**"
]
}
],
"version": 4
}
个人经验:VS Code 的 tasks.json 和 launch.json 是编译和调试的核心。我习惯把编译命令写在 tasks.json 里,一键编译。调试配置写在 launch.json 里,配合 J-Link 或 ST-Link 直接单步调试。
2.3.2 Keil MDK 集成
Keil 是老牌 IDE,很多公司还在用。它自带 ARMCC 编译器,但也可以配置成 GCC。
- 打开 Project → Options for Target → C/C++
- 在「Misc Controls」中添加
--gnu启用 GCC 扩展 - 在「Linker」中配置 GCC 链接脚本
避坑指南:Keil 默认用 ARMCC,如果你要切到 GCC,记得把编译器路径改成 arm-none-eabi-gcc。我见过有人没改路径,编译出来的是 ARMCC 的产物,和 GCC 的链接脚本不匹配,链接阶段疯狂报错。
2.3.3 IAR Embedded Workbench 集成
IAR 的优化能力很强,但配置稍复杂。
- 打开 Project → Options → General Options
- 在「Library Configuration」中选择「GNU GCC」
- 在「Compiler」中指定 GCC 路径
| IDE | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| VS Code | 免费、轻量、插件丰富 | 需要手动配置编译链 | 个人项目、开源项目 |
| Keil MDK | 集成度高、调试方便 | 收费、代码量限制 | 公司项目、ARM 生态 |
| IAR | 优化强、代码密度高 | 收费、配置复杂 | 对性能要求高的项目 |
2.4 知识体系结构图
下面这张图,帮你理清开发环境搭建的整体脉络:
2.5 常见问题与避坑
最后,我总结几个我实际踩过的坑:
- 路径包含空格:Windows 下 Program Files 有空格,有些老版本工具链会解析失败。我建议装到
C:\ARM\这种无空格路径。 - 版本不匹配:GCC 版本和芯片内核有关。Cortex-M0 用 10-2020-q4-major 没问题,但 Cortex-M7 可能需要更新的版本。
- 环境变量未刷新:改完 PATH 记得重启终端。我见过有人改完没重启,折腾了半小时。
- IDE 编译器路径配置错误:Keil 和 IAR 里配置 GCC 路径时,一定要指向
bin目录下的可执行文件,不是安装根目录。
避坑指南:我曾经在一个项目里,用 Keil 配置了 GCC 路径,但忘记改链接脚本。结果编译通过,链接时报错「undefined symbol」。查了半天,发现链接脚本还是 ARMCC 的格式。记住:换了编译器,链接脚本也得换。
环境搭建是嵌入式开发的第一步,也是最重要的一步。配好了,后面一帆风顺;配不好,寸步难行。按照上面的步骤来,应该不会出大问题。