嵌入式 CMake 化浪潮:七大平台现状对比
2026/8/28 6:57:03 网站建设 项目流程

摘要:2025 年,嵌入式行业已全面转向CMake,从 STM32 到 ESP32、Zephyr,七大主流平台均已原生支持或强制采用。本文逐一对比各平台现状,并聚焦国产芯片LKS32的独特机遇——官方虽仅提供 Keil 工程,但通过完整的移植方案,我们已成功将其接入 CMake 生态,填补国产芯片构建体系的最后一块空白。

行业迁移现状

    • 各平台现状总览
      • 行业迁移现状:嵌入式 CMake 化浪潮
      • 本课目标
      • 各大平台 CMake 支持现状 — 2025 年
      • 迁移时间线 2018 -> 2025
      • 三大驱动力——为什么全行业都在转
        • 开源生态需求
        • CI/CD 压力
        • 多架构统一
        • 本页大纲:行业迁移全景
      • 🌊 CMake 化浪潮全景——7 大平台一图看清
      • ⏳ 迁移时间线深度解析——四个关键转折点
      • 🧲 三大驱动力的深度拆解——为什么"转"是必然
      • 📋 行业迁移状态总表——把你的芯片对号入座
    • 深入 STM32
      • 深入 STM32:全球最大 ARM MCU 生态的 CMake 化
      • STM32CubeMX 生成的 CMakeLists.txt(简化示例)
      • STM32 的迁移意义
        • 本页大纲:深入 STM32 迁移
      • 🔵 STM32 的转身——最震撼的行业信号
      • 📄 CubeMX 生成的 CMakeLists.txt 结构——和你将要写的 LKS32 版几乎同构
      • 🧭 STM32 vs LKS32 迁移对照表——别人走过的路就是你的地图
      • 📊 STM32 生态规模——为什么它的选择影响全行业
      • 🧩 STM32CubeMX 生成工程 vs LKS32 手写工程——同一骨架,两种来源
    • 深入 ESP32/Zephyr
      • 深入 ESP32 与 Zephyr——CMake 作为唯一构建系统
      • ESP-IDF v5.0:从 GNU Make 到 CMake 的强制迁移
      • Zephyr RTOS — "CMake 原生"从第一天
      • 对比 ESP32 vs Zephyr vs STM32 — 三种 CMake 化路径
        • 本页大纲:ESP32 与 Zephyr 的强制 CMake
      • 🟢 ESP-IDF v5.0 — "Make 已被移除"是 2022 年最大的行业宣言
      • 🟡 Zephyr — 200+ 开发板一套构建系统的"极端测试"
      • 🧠 从 RTOS 的"强制 CMake"学到什么
      • 📈 ESP-IDF 与 Zephyr 的构建命令全景对比——同一底层,两种体验
      • 🎓 从 Zephyr 的设备树看"配置驱动构建"——CMake 的终极形态
    • LKS32 现状与机遇
      • LKS32 的现状——官方仅 Keil,但完整 CMake 移植存在
      • 凌鸥官方资源 vs 我们移植的 CMake 工程
      • LKS32 CMake 移植的五步流程
      • 移植后的验证结果
        • 本页大纲:LKS32 现状与机遇
      • 🔴 凌鸥 LKS32 的现状——官方仅提供 Keil 工程
      • 🗺️ 五步移植方案——本教程 58 课的总路线图
      • 💎 移植后的独特竞争力——为什么这件事值得做
        • 稀缺性
        • 理解深度
        • 可迁移性
      • 🗂️ 官方 SDK 目录 vs 移植后目录——差异一目了然
      • 📅 LKS32 移植里程碑——58 课如何一步步走完

各平台现状总览

行业迁移现状:嵌入式 CMake 化浪潮

2018 年还只是一个趋势——2025 年已经是共识。从 MCU SDK 到 RTOS,整个嵌入式生态正在全面转向 CMake

本课目标

  • 看清 2025 年各大 MCU 平台对 CMake 的支持现状

  • 理解为什么 STM32/ESP32/Zephyr 三巨头全部转向 CMake

  • 定位 LKS32 的现状——官方仅有 Keil,但我们已完整移植

各大平台 CMake 支持现状 — 2025 年

平台CMake 支持状态说明
STM32原生官方推荐STM32CubeMX 6.x 原生生成 CMakeLists.txt。全球最大 ARM MCU 生态转向 CMake。
ESP32 (乐鑫)强制唯一构建系统ESP-IDF v5.0 彻底移除 GNU Make。Xtensa + RISC-V 双架构统一 CMake。
Zephyr RTOS强制唯一构建系统Linux 基金会旗下,支持 200+ 开发板。第一天就是 CMake。
NXP原生官方推荐MCUXpresso SDK 2023 年起提供 CMake 构建选项。
Raspberry Pi Pico强制唯一构建系统Pico SDK 完全是 CMake 项目。官方文档全部以 CMake 为例。
Nordic nRF强制唯一构建系统nRF Connect SDK 基于 Zephyr——本质是 CMake。
凌鸥 LKS32需自行移植官方仅提供 Keil 工程。本教程目的:完整 CMake 移植方案。

迁移时间线 2018 -> 2025

三大驱动力——为什么全行业都在转

开源生态需求

RTOS(Zephyr/FreeRTOS)需要在所有平台上可构建。专有 IDE 无法满足——它们没有 CLI、不支持 Linux CI。

CI/CD 压力

现代软件工程要求每次 PR 自动编译验证。专有 IDE 的 GUI 无法在 CI 服务器上运行。

多架构统一

Cortex-M + RISC-V + Xtensa — 不能为每个架构维护一套独立的构建系统。CMake toolchain.cmake 一行切换。

💡 结论2025 年开始一个嵌入式新项目——选择 CMake 不是"创新",是默认选项。继续用 Keil 管理构建配置是走在越来越窄的路上。

本页大纲:行业迁移全景

① 七大平台 CMake 支持现状 → ② 迁移时间线 2018→2025 → ③ 三大驱动力深度解析 → ④ 平台支持矩阵 SVG → ⑤ 交互:点选平台看迁移详情

🌊 CMake 化浪潮全景——7 大平台一图看清

⏳ 迁移时间线深度解析——四个关键转折点

时间事件为什么重要
2018 Q2STM32CubeMX 放弃 SW4STM32最大 ARM MCU 厂商表态——行业第一个重大信号
2020 Q3Zephyr 2.3 LTS 发布Linux 基金会 RTOS 证明 CMake 在 RTOS 级别可行
2022 Q4ESP-IDF v5.0 移除 Make全球销量最大 Wi-Fi MCU 全面 CMake 化
2023-25ARM 生态全面转向NXP/Nordic/Renesas 全支持——CMake 成为默认选项

💡 看懂这个时间线的规律每一次迁移都遵循同一模式:先是大厂表态 → 然后是开源社区跟进 → 最后全行业默认。LKS32 还在"官方仅 Keil"阶段——你现在学的,正是下一波浪潮的入场券。

🧲 三大驱动力的深度拆解——为什么"转"是必然

💡 一句话总览2025 年选 CMake 不是"创新",是*“跟随行业共识”*。今天你不学,明天换工作、换项目、换芯片时,CMake 会来找你。

📋 行业迁移状态总表——把你的芯片对号入座

平台CMake 地位迁移时间驱动原因你的行动
STM32原生2018 起官方表态 + 生态压力学会读官方模板
ESP32强制2022 v5.0多架构统一理解 idf.py 封装
Zephyr强制第一天200+ 板卡管理学习配置驱动思想
Pico强制2021 发布起官方设计决策验证 CMake 普及度
Nordic强制2020 起基于 Zephyr同上
NXP原生2023 起跟随 ST 步伐同上
凌鸥 LKS32官方仅 Keil你正在做

💡 对号入座结论7 大平台中 5 个"强制/原生"CMake、1 个"原生"、只有 LKS32 是空白。你不是在学一个冷门工具——你是在填补国产芯片生态里最后一块空白。

深入 STM32

深入 STM32:全球最大 ARM MCU 生态的 CMake 化

ST 的 CMake 化策略是双向兼容——既保留传统 IDE 工程,又原生生成 CMakeLists.txt。STM32CubeMX 6.x 默认勾选"Generate CMake project"。

STM32CubeMX 生成的 CMakeLists.txt(简化示例)

cmake_minimum_required (VERSION 3.20 ) project (stm32f103_blinky C ASM) # CubeMX 自动添加所有源文件 add_executable ( ${PROJECT_NAME} .elf) target_sources ( ${PROJECT_NAME} .elf PRIVATE Core/Src/main.c Core/Src/stm32f1xx_it.c Core/Src/gpio.c Core/Src/usart.c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c ... (CubeMX 自动列出所有用到的 HAL 文件) ) target_include_directories ( ${PROJECT_NAME} .elf PRIVATE Core/Inc Drivers/STM32F1xx_HAL_Driver/Inc Drivers/CMSIS/Device/ST/STM32F1xx/Include Drivers/CMSIS/Include ) target_compile_definitions ( ${PROJECT_NAME} .elf PRIVATE USE_HAL_DRIVER STM32F103xB )

STM32 的迁移意义

层面意义
用户量STM32 是全球出货量最大的 Cortex-M 系列 MCU。它的 CMake 化意味着数以百万计的开发者从 Keil/IAR 转向 CMake。
生态影响CubeMX 的 CMake 输出成为了"嵌入式 CMake 的标准写法"——其他厂商的 SDK 借鉴了它的 target_sources + target_include_directories 模式。
工具链ST 推荐 arm-none-eabi-gcc 而非 ARMCC。这意味着从 STM32 开始,GCC 成为 Cortex-M 开发的事实标准编译器。

💡 这跟 LKS32 有什么关系?LKS32MC033 也是 Cortex-M0——和 STM32F0 使用的是完全相同的 arm-none-eabi-gcc 工具链。STM32 的 CMake 模式可以直接借鉴到 LKS32 的移植中。

本页大纲:深入 STM32 迁移

① STM32CubeMX 为什么放弃自家 IDE → ② CubeMX 生成 CMake 的完整流程 → ③ 生成的 CMakeLists.txt 结构解剖 → ④ 交互:CubeMX 生成流程模拟 → ⑤ STM32 与 LKS32 的对照启示

🔵 STM32 的转身——最震撼的行业信号

2018 年,ST 官方宣布停止维护 System Workbench(SW4STM32/AC6)——这是基于 Eclipse 的免费 IDE。理由很直接:开发者要的是"构建系统",不是"IDE 锁定"。STM32CubeMX 从 6.0 开始原生生成 CMakeLists.txt,全球最大的 ARM MCU 生态正式拥抱 CMake。

📄 CubeMX 生成的 CMakeLists.txt 结构——和你将要写的 LKS32 版几乎同构

# CubeMX 生成(简化) cmake_minimum_required(VERSION 3.20) project(stm32f103c8t6 LANGUAGES C ASM) add_compile_definitions(STM32F103xB USE_HAL_DRIVER) ← 宏定义 # 收集源文件 file(GLOB_RECURSE HAL_SOURCES "Drivers/STM32F1xx_HAL_Driver/Src/*.c") file(GLOB_RECURSE CORE_SOURCES "Core/Src/*.c" "Drivers/CMSIS/Device/*.c") add_executable(${PROJECT_NAME}.elf ${HAL_SOURCES} ${CORE_SOURCES}) # 链接脚本 + 启动文件 target_link_options(${PROJECT_NAME}.elf PRIVATE -T"STM32F103C8Tx_FLASH.ld") target_sources(${PROJECT_NAME}.elf PRIVATE "startup_stm32f103xb.s") # POST_BUILD 生成 .hex/.bin(第 18 课详解) add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD COMMAND ${CMAKE_OBJCOPY} -O ihex ... .hex)

💡 对照你的 LKS32 项目你会发现 CubeMX 生成的 CMakeLists.txt 与第 28 课要讲的 LKS32 顶层 CMakeLists.txt骨架几乎一样:project() → 宏定义 → 收集源文件 → add_executable → 链接脚本 → POST_BUILD。学会一套,所有厂商通用。

🧭 STM32 vs LKS32 迁移对照表——别人走过的路就是你的地图

维度STM32(已迁移)LKS32(本教程)
官方 SDKCubeMX 原生生成 CMake仅 Keil 工程
迁移难度低——官方已支持中——需手写 CMakeLists + 移植启动文件
工具链arm-none-eabi-gccarm-none-eabi-gcc(同一套!)
调试J-Link/ST-Link + GDBJ-Link + GDB(第 42-46 课)
你的收益学会看官方模板学会从零构建——理解更深

💡 最关键的认知STM32 开发者用 CubeMX“一键生成”CMake 工程,但他们常常不理解生成的配置。你手把手把 LKS32 从 Keil 移植成 CMake——你对构建的理解比大多数 STM32 开发者更深。这份理解,就是迁移任何芯片的通用能力。

📊 STM32 生态规模——为什么它的选择影响全行业

🧩 STM32CubeMX 生成工程 vs LKS32 手写工程——同一骨架,两种来源

对比维度STM32CubeMX 生成LKS32 手写(本教程)
CMakeLists 来源工具自动生成手写(第 28 课逐行)
理解深度生成即用,未必懂逐行理解,全链路掌握
启动文件自动生成 .s手写移植 startup.S(第 49 课)
链接脚本自动生成 .ld手写移植(第 25-26 课)
学习曲线低门槛高天花板高投入高回报

💡 定位差异CubeMX 适合"快速启动产品开发";本教程适合"想彻底掌握构建系统"的你。两条路殊途同归——都会落到同一份 CMake 语法上。

深入 ESP32/Zephyr

深入 ESP32 与 Zephyr——CMake 作为唯一构建系统

如果说 STM32 的 CMake 化是"兼容性过渡",那么ESP32 和 Zephyr 的 CMake 化就是"断腕式革命"——它们彻底移除了旧的构建系统,CMake 是唯一选项

ESP-IDF v5.0:从 GNU Make 到 CMake 的强制迁移

乐鑫在 2022 年做了一个激进但正确的决定:在 ESP-IDF v5.0 中完全移�� GNU Make 支持。所有 ESP32/ESP32-S/ESP32-C 系列(覆盖 Xtensa 和 RISC-V 两种 CPU 架构)统一使用 CMake。

💡 迁移成功的原因ESP-IDF 的 CMake 化不是简单的"替换构建系统"——而是配合 idf.py 命令行工具提供了一个完整的开发体验。所有这些命令底层都调用 CMake。

Zephyr RTOS — "CMake 原生"从第一天

Zephyr 从一开始就以 CMake 为核心。它的构建系统非常复杂——支持 200+ 开发板、多架构(ARM/RISC-V/x86/ARC)、设备树(DeviceTree)、Kconfig 配置系统。这证明了CMake 可以胜任最复杂的嵌入式构建场景

# 构建 Nordic nRF52840 开发板的 blinky 示例 west build -b nrf52840dk_nrf52840 samples/basic/blinky # west 底层调用: # cmake -B build -DBOARD=nrf52840dk_nrf52840 # cmake --build build
Zephyr 特性CMake 如何支撑
200+ 开发板每个板级支持包是一个 CMake 模块,通过 BOARD 变量选择
设备树 (DeviceTree)CMake 调用 dtc 编译 .dts -> .dtb,链接到固件
Kconfig 配置CMake 调用 kconfig 工具,生成 autoconf.h 宏定义
多架构toolchain.cmake 自动切换 ARM/RISC-V/x86 GCC

对比 ESP32 vs Zephyr vs STM32 — 三种 CMake 化路径

平台CMake 化方式激进程度对用户的冲击
STM32CubeMX 同时生成 CMake + Keil/IAR 工程温和过渡低——用户可自由选择
ESP32ESP-IDF v5.0 移除 Make,仅 CMake激进革命高——旧 Makefile 工程必须重写
Zephyr从第一天就是 CMake无历史包袱无——用户从一开始就用 CMake
本页大纲:ESP32 与 Zephyr 的强制 CMake

① ESP-IDF v5.0 移除 Make 的来龙去脉 → ② Zephyr 的 CMake 构建系统架构 → ③ 强制 CMake 意味着什么 → ④ 交互:两平台构建命令对比 → ⑤ 从 RTOS 学到什么

🟢 ESP-IDF v5.0 — "Make 已被移除"是 2022 年最大的行业宣言

2022 年 11 月,乐鑫发布 ESP-IDF v5.0,彻底移除 GNU Make 构建系统——CMake 成为唯一官方构建方式。这意味着:所有旧教程失效、所有旧项目要迁移、所有第三方库要更新。一个商业公司为了长期健康,敢做"破坏性"决策——这本身就是信号:CMake 不是"可选项",是"唯一选项"。

# ESP-IDF(v5.0+)—— idf.py 是 CMake 的封装 $ idf.py set-target esp32s3 $ idf.py build # 内部就是 cmake --build $ idf.py flash # 内部就是 esptool 烧录 # Zephyr—— west 是 CMake 的封装 $ west build -b nucleo_f103rb samples/hello_world $ west flash # 内部也是 cmake + 烧录器 # 本质:两者底层都是 CMake $ cmake --preset default # 你将在第 33-35 课掌握的技能

🟡 Zephyr — 200+ 开发板一套构建系统的"极端测试"

Zephyr RTOS 支持200+ 开发板、多种架构(ARM/RISC-V/Xtensa/SPARC)。如果用传统 IDE,每个板子一套工程——不可维护。Zephyr 的选择:一套 CMake 构建系统 + 每个板子一个配置文件

🧠 从 RTOS 的"强制 CMake"学到什么

学到的认知具体含义
CMake 是底层引擎idf.py/west 只是 CMake 的"人性化封装"——懂 CMake 就能看懂任何框架的构建
配置与代码分离板卡差异 = 配置文件差异(toolchain/设备树),不是代码差异
学习投资回报高学一次 CMake,Zephyr/ESP-IDF/STM32/LKS32 全部通用
封装不可怕封装下面是标准 CMake——出问题时剥开看本质

💡 本页小结ESP-IDF 与 Zephyr 的"强制 CMake"证明:当生态复杂到一定程度(多架构、多板卡、多厂商),唯一可行的构建方案就是 CMake。LKS32 的复杂度虽低,但方向一致——你现在打的地基,未来能盖任何楼。

📈 ESP-IDF 与 Zephyr 的构建命令全景对比——同一底层,两种体验

🎓 从 Zephyr 的设备树看"配置驱动构建"——CMake 的终极形态

Zephyr 用 **设备树(DTS)**描述硬件——每个板卡的引脚、外设、时钟全部写在配置文件里。CMake 读取设备树 + Kconfig,自动决定编译哪些驱动。这就是"配置驱动构建"的极致:硬件差异全部下沉到配置文件,代码零改动。

// boards/arm/nucleo_f103rb/nucleo_f103rb.dts &uart1 { status = "okay"; ← 使能 UART1 current-speed = <115200>; ← 波特率 }; &spi1 { status = "okay"; ← 使能 SPI1 cs-gpios = <&gpioa 4 GPIO_ACTIVE_LOW>; ← CS 引脚 };

💡 对照你的 LKS32本教程第 35 课"多芯片 Presets"用的就是同一思想的简化版:用 CMakePresets + option() 把芯片差异配置化。Zephyr 是终极形态,你的 LKS32 是入门形态——但核心思想一致:配置与代码分离。

LKS32 现状与机遇

LKS32 的现状——官方仅 Keil,但完整 CMake 移植存在

凌鸥官方为 LKS32MC033 提供的开发资源是Keil Pack(.pack 压缩包)。没有官方的 CMake 支持。这正是本教程的独特价值所在。

凌鸥官方资源 vs 我们移植的 CMake 工程

官方提供格式我们的移植
Keil Pack.pack 压缩包(LKS03x v1.1.8)提取 CMSIS + HAL 源文件 -> CMake 工程
.uvprojx 工程Keil 二进制 XML重写为 CMakeLists.txt + CMakePresets.json + toolchain.cmake
startup_xxx.sARMCC 汇编语法(AREA/DCD/PROC)重写为 GCC 汇编语法(.section/.word/.type)-> startup_lks32mc03x.S
链接脚本 .sctScatter File(ARMCC 专用)重写为 .ld(GNU Linker 语法)-> lks32mc03x.ld
nvr.libARMCC 预编译库(闭源)重写为 lks32mc03x_nvr_gcc.c(GCC 源码实现 Read_Trim)
J-Link 设备注册手动添加到 JLinkDevices.xml同官方方法——已配置好 LKS32MC033 条目

LKS32 CMake 移植的五步流程

移植后的验证结果

💡 这就是本教程的价值我们不仅教你 CMake 语法——我们给你一个完整可运行的 LKS32 CMake 工程,从 Keil 完全迁移到了 GCC+CMake 生态系统。Flash 仅用 3.91%——还有 96% 空间留给你加功能。

本页大纲:LKS32 现状与机遇

① 凌鸥官方的现状——仅 Keil → ② 这不是"落后",是"机会" → ③ 五步移植方案总览 → ④ 交互:移植前后对比 → ⑤ 移植后你的独特竞争力

🔴 凌鸥 LKS32 的现状——官方仅提供 Keil 工程

打开凌鸥官方 SDK 下载页:所有示例工程都是 .uvprojx(Keil 格式)。没有 CMake、没有 GCC 工程、没有 Linux 支持。对大多数用户这不是问题——“Keil 能用就行”。但这也意味着:所有依赖自动化、CI、跨平台的现代工作流,LKS32 生态都无法直接享受

🗺️ 五步移植方案——本教程 58 课的总路线图

步骤内容做什么对应课程
1搭环境MSYS2 + GCC + CMake + Ninja第 05-08 课
2建骨架七层目录 + 顶层 CMakeLists + toolchain第 19-22、27-29 课
3移植代码启动文件 .s→.S、.sct→.ld、HAL 编译第 25-26、48-51 课
4接调试VSCode + J-Link + Cortex-Debug第 36-46 课
5上自动化Presets + tasks + CI/CD第 33-35、47、55 课

💡 好消息官方 SDK 的HAL 驱动源码、寄存器定义、外设库都是跨编译器的——Keil 工程里的 .c/.h 可以直接复用,只需要改写启动文件、链接脚本、构建配置这三样。第 48 课会详细讲移植对照。

💎 移植后的独特竞争力——为什么这件事值得做

稀缺性

全网络搜"LKS32 CMake"几乎零结果——你做完就是先驱,你的工程就是别人的参考

理解深度

从零移植逼你理解启动、链接、编译全链路——比"一键生成"开发者理解深得多

可迁移性

这份移植能力能套用到任何"只有 Keil 工程"的国产芯片——你的技能边界远超 LKS32

💡 本页小结LKS32 官方没做 CMake,不是"落后",是*“把机会留给了你”*。你现在学的,不只是构建工具——是国产芯片生态里稀缺的现代构建能力。

🗂️ 官方 SDK 目录 vs 移植后目录——差异一目了然

LKS32MC03x_Demo/ ├── LKS32MC03x.uvprojx ← 唯一的"构建入口" ├── User/ │ ├── main.c │ └── lks32mc03x_it.c ├── Drivers/ │ ├── CMSIS/ (头文件) │ ├── Device/ (startup + system) │ └── HAL/ (18 外设 .c) └── config/ └── lks32mc03x.h
lks32-cmake/ ├── CMakeLists.txt ← 顶层构建入口 ├── cmake/toolchain.cmake ← 工具链 ├── CMakePresets.json ← 预设 ├── app/ (main.c) ├── bsp/ (led/delay) ├── drivers/ │ ├── CMSIS/ │ ├── Device/ │ └── HAL/ ├── .vscode/ (settings/launch) └── build/ (自动生成)

💡 关键差异左边的工程"构建入口"是.uvprojx(需 Keil 解析);右边是CMakeLists.txt(纯文本,任何工具可读)。源码几乎没动,动的是"构建方式"——这正是移植的全部含义。

📅 LKS32 移植里程碑——58 课如何一步步走完

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询