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 下我推荐两种方式:

  1. 直接下载安装包:去 ARM 官网下载 gcc-arm-none-eabi 的 Windows 版 .exe 安装包。安装时记得勾选「Add to PATH」。
  2. 通过 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 环境变量

  1. 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
  2. 在「系统变量」中找到 Path,双击编辑
  3. 添加 GCC 工具链的 bin 目录路径,例如:C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin
  4. 点击确定保存

避坑指南:我曾经见过有人把路径写成了 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 轻量、免费,插件生态丰富。我现在的项目基本都用它。

  1. 安装 C/C++ 扩展(Microsoft 官方)
  2. 安装 Cortex-Debug 扩展(用于调试)
  3. 配置 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。

  1. 打开 Project → Options for Target → C/C++
  2. 在「Misc Controls」中添加 --gnu 启用 GCC 扩展
  3. 在「Linker」中配置 GCC 链接脚本

避坑指南:Keil 默认用 ARMCC,如果你要切到 GCC,记得把编译器路径改成 arm-none-eabi-gcc。我见过有人没改路径,编译出来的是 ARMCC 的产物,和 GCC 的链接脚本不匹配,链接阶段疯狂报错。

2.3.3 IAR Embedded Workbench 集成

IAR 的优化能力很强,但配置稍复杂。

  1. 打开 Project → Options → General Options
  2. 在「Library Configuration」中选择「GNU GCC」
  3. 在「Compiler」中指定 GCC 路径
IDE 优点 缺点 适用场景
VS Code 免费、轻量、插件丰富 需要手动配置编译链 个人项目、开源项目
Keil MDK 集成度高、调试方便 收费、代码量限制 公司项目、ARM 生态
IAR 优化强、代码密度高 收费、配置复杂 对性能要求高的项目

2.4 知识体系结构图

下面这张图,帮你理清开发环境搭建的整体脉络:

开发环境搭建知识体系 开发环境搭建知识体系 GCC 工具链 Windows 安装 Linux 安装 Mac 安装 环境变量配置 VS Code 集成 Keil MDK 集成 IAR 集成 验证:arm-none-eabi-gcc --version 提示:工具链版本必须与芯片架构匹配,安装完成后务必验证

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 的格式。记住:换了编译器,链接脚本也得换。

环境搭建是嵌入式开发的第一步,也是最重要的一步。配好了,后面一帆风顺;配不好,寸步难行。按照上面的步骤来,应该不会出大问题。