公司动态
安装 CMake 与 Ninja
安装 CMake 与 NinjaCMakeNinja安装安装 CMake 与 Ninja本课目标一行命令安装 CMake 4.4 Ninja 1.13GCC CMake Ninja 三件套的关系本页大纲安装 CMake 与 Ninja 两条命令——安装 CMake 和 Ninja 三件套关系——GCC CMake Ninja 如何配合✅ 安装验证——两条命令确认 CMake 与 Ninja 的安装信息速查 CMake 是Make 的替代吗——最常见的误解 三件套的版本搭配——LKS32 项目推荐组合️ 三件套安装后的完整环境——六件工具进度盘点 三件套记忆卡——一页带走版本要求 3.20CMake 版本为什么 3.20LKS32 项目用到的 CMake 特性与对版本MSYS2 提供的 CMake 版本 vs 其他来源验证 CMake 版本本页大纲版本要求 ≥ 3.20 为什么要求 CMake ≥ 3.20——因为 CMakePresets CMake 版本功能演进——每个大版本带来了什么 检查你的版本——两行命令 Presets 的完整结构——第 33 课预习 版本不足的后果——三个真实报错场景 CMake 版本决策速查表——一句话解决用哪个版本Ninja vs MakeNinja vs Make — 为什么 LKS32 项目选 NinjaNinja vs Make 全面对比LKS32 项目实测速度对比验证 Ninja 安装本页大纲Ninja vs Make⚡ Ninja vs Make——为速度而生的设计哲学 速度实测对比——LKS32 项目的真实数据 什么时候该用 Make很少⚙️ 从 Make 到 Ninja——CMake 一条命令切换引擎 Ninja 的并发机制——为什么它天然更快 Ninja 常见参数速查 Make vs Ninja 的完整对比表——面试也可能问协作原理CMake Ninja 协作原理——configure - generate - build三步构建流程全景三个关键文件的角色本页大纲协作原理 三步流程——CMake 构建的完整生命周期 build.ninja 长什么样——CMake 生成的施工图纸 CMakeCache.txt——configure 的记忆️ 日常开发中的三步流程——你每天重复的动作 build.ninja 与 CMakeCache 的位置——工程目录全景 从三步流程到日常快捷键——VSCode 里的一键操作验证与排错验证与排错——确认一切就绪终极测试编译 LKS32 项目查看 Ninja 后端生成的文件常见排错——从安装到编译本页大纲验证与排错 终极验证——用三件套真实构建一个最小工程 六大常见错误速查表✅ 环境总验收清单——第二阶段的毕业考试 第 07 课知识地图——构建系统的完整认知 本课毕业标准——看完这页你该带走什么 第 07 课与全系列的位置CMakeNinja安装安装 CMake 与 Ninja前两课装好了arm-none-eabi-gcc编译器。但光有编译器不够——你需要 **CMake构建系统生成器 Ninja编译执行引擎**来把 30 个源文件组织起来编译。本课目标理解 CMake 版本为什么必须 3.20LKS32 项目用了哪些新特性学会用 pacman 一行命令安装 CMake Ninja搞清楚Ninja 为什么比 Make 快——多核并行 为机器生成优化验证安装后用 LKS32 项目实测编译速度一行命令安装 CMake 4.4 Ninja 1.13两个工具加起来不到50 MB——比 GCC 的 200MB 轻量得多。GCC CMake Ninja 三件套的关系 核心认知CMake 不编译代码——它生成编译配方。Ninja 不编译代码——它按配方调用 GCC 来编译。只有 GCC 才是真正把 .c 变成 .o 的那个。本页大纲安装 CMake 与 Ninja① 两条安装命令 → ② CMake 与 Ninja 是什么 → ③ 三件套关系GCCCMakeNinja→ ④ 交互三件套分工 → ⑤ 安装验证 两条命令——安装 CMake 和 Ninja继续在MSYS2 UCRT64 终端里执行第 06 课装 gcc 的同一个终端$ pacman -S mingw-w64-ucrt-x86_64-cmake :: 正在安装 cmake... 完成 ← 装 CMake版本 4.4.0 $ pacman -S mingw-w64-ucrt-x86_64-ninja :: 正在安装 ninja... 完成 ← 装 Ninja版本 1.13.2 一个常见疑问为什么 CMake 和 Ninja 分两次装可以合并成一条pacman -S mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-ninja。分两条写只是为了讲解清晰。 三件套关系——GCC CMake Ninja 如何配合✅ 安装验证——两条命令确认$ cmake --version | head -1 cmake version 4.4.0 $ ninja --version 1.13.2 $ which cmake ninja /c/msys64/ucrt64/bin/cmake.exe /c/msys64/ucrt64/bin/ninja.exe ← 都在 ucr64/bin ✅ 里程碑三件套齐了GCC CMake Ninja——你已经拥有完整的命令行构建能力。第 15 课会用这三件套跑通第一个 LKS32 CMake 工程。 一句话总览CMake 是大脑决定怎么构建、Ninja 是施工队长调度执行、GCC 是工人真正干活——三件套缺一不可本课把它们装齐。 CMake 与 Ninja 的安装信息速查项目CMakeNinja包名mingw-w64-ucrt-x86_64-cmakemingw-w64-ucrt-x86_64-ninja当前版本4.4.01.13.2安装目录C:\msys64\ucrt64\binC:\msys64\ucrt64\bin可执行文件cmake.exeninja.exe最低要求≥ 3.20Presets1.10现代特性 CMake 是Make 的替代吗——最常见的误解 三件套的版本搭配——LKS32 项目推荐组合工具版本为什么装了吗arm-none-eabi-gcc16.1.0MSYS2 当前稳定版✅ 第 06 课CMake4.4.0≥3.20 满足 Presets✅ 本课Ninja1.13.2现代特性全支持✅ 本课️ 三件套安装后的完整环境——六件工具进度盘点#工具状态课程1MSYS2 UCRT64✅ 已装第 05 课2arm-none-eabi-gcc✅ 已装第 06 课3CMake✅ 本课第 07 课4Ninja✅ 本课第 07 课5gdb-multiarch⏳ 调试阶段第 41 课6J-Link⏳ 调试阶段第 42 课 进度感四件核心工具就位4/6——命令行构建能力已完整。剩下的 gdb/J-Link 是调试用的等学到第 41 课再装不迟。 三件套记忆卡——一页带走工具一句话职责类比GCC真正编译/链接代码工人CMake读配置、生成施工图总工程师Ninja调度并行编译施工队长 装完立即自测三件套装完花 30 秒跑一次which gcc cmake ninja → 三条 --version → 最小 CMake 工程。全绿 环境地基牢固可以放心进入第 08 课镜像加速。版本要求 3.20CMake 版本为什么 3.20CMake 的每个主版本都引入了新特性——LKS32 项目用了 3.13 到 3.21 之间的多个关键能力。低于 3.20 会直接报错。LKS32 项目用到的 CMake 特性与对版本CMake 命令/特性最低版本在 LKS32 项目中的使用target_link_options()3.13顶层 CMakeLists.txt 第 22 行TARGET ... PRIVATE -T${LINKER_SCRIPT}CMAKE_TOOLCHAIN_FILE3.19CMakePresets.json 第 10 行CMAKE_TOOLCHAIN_FILE: ...toolchain.cmakeCMakePresets version 33.21CMakePresets.json 第 2 行version: 3支持 configurePresets buildPresetscmake_minimum_required(VERSION 3.20)3.20顶层 CMakeLists.txt 第 1 行——如果你用 3.19 会直接报错MSYS2 提供的 CMake 版本 vs 其他来源来源版本优缺点MSYS2 pacman4.4.0推荐——最新版自动更新与 GCC/Ninja 同源管理cmake.org 官网下载任意需手动配置 PATH不与 MSYS2 生态集成Chocolatey / winget不定版本可能落后且 PATH 与 MSYS2 可能冲突 为什么用 4.4 而不是 3.20CMake 向后兼容——3.20 写的 CMakeLists.txt 在 4.4 上完全能用。用最新版获得最好的 Presets 支持、更快的 configure 速度、更清晰的错误信息。验证 CMake 版本本页大纲版本要求 ≥ 3.20① 为什么 CMake ≥ 3.20 是硬门槛 → ② CMakePresets 需要什么 → ③ 各版本功能演进 → ④ 交互版本功能对比 → ⑤ 检查你的版本 为什么要求 CMake ≥ 3.20——因为 CMakePresetsCMakePresets.json 是 3.19 引入、3.20 完善的特性——本系列第 33-35 课的核心工具。没有它你就得每次手敲一串长命令# 有 CMakePresets.json第 33 课—— 2 个短命令 $ cmake --preset debug $ cmake --build --preset debug # 没有 Presets —— 一长串还容易忘参数 $ cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPEDebug -DCMAKE_TOOLCHAIN_FILEcmake/toolchain.cmake -DCMAKE_EXPORT_COMPILE_COMMANDSON 结论Presets 把一长串参数压缩成一个名字——这是现代 CMake 项目的标配。版本低于 3.20 意味着你用不了本系列的核心工作流。 CMake 版本功能演进——每个大版本带来了什么 版本选择建议本教程统一用 CMake 4.4MSYS2 当前版——它完全向下兼容 ≥3.20 的语法。只要你写 CMakeLists 时遵守 3.20 特性任何新版本都能跑。 检查你的版本——两行命令$ cmake --version cmake version 4.4.0 $ cmake --help-presets Available configure presets: ← 若能列出预设 Presets 功能可用 debug - Debug build release - Release build 验收标准version ≥ 3.20 help-presets 有输出 版本门槛通过。如果版本偏低如 3.18先 pacman -Syu 再重装 cmake。 一句话总览版本门槛 3.20 的实质Presets 工作流。它把长命令变短名字是本系列第 33-35 课的基础设施——装新不装旧一劳永逸。 Presets 的完整结构——第 33 课预习{ version: 3, configurePresets: [ { name: debug, generator: Ninja, binaryDir: ${sourceDir}/build/debug, cacheVariables: { CMAKE_BUILD_TYPE: Debug, CMAKE_TOOLCHAIN_FILE: ${sourceDir}/cmake/toolchain.cmake } } ], buildPresets: [ { name: debug, configurePreset: debug } ] } 为什么要 ≥3.20上面的 JSON 用到configurePresets buildPresets environment 字段——3.20 才完整支持。第 33 课会逐行拆解现在先留个印象这就是版本门槛的意义所在。 版本不足的后果——三个真实报错场景版本报错意味着CMake 3.18CMake Error: Unknown argument --presetPresets 功能不存在CMake 3.19buildPresets 未识别只支持 configurePresetsCMake 3.20-environment 字段报错缺 PATH 注入能力 教训版本差一个小数点功能差一大截。装新不装旧直接上仓库最新版当前 4.4就永远不会有这些烦恼。 CMake 版本决策速查表——一句话解决用哪个版本场景推荐版本原因本教程LKS324.4MSYS2 当前向下兼容 3.20 语法老项目维护项目自带的版本先跑通再升级CI 自动化固定一个版本可复现构建第 03 课最新特性尝鲜4.x 最新新功能 更准警告 记忆锚点版本门槛三数字3.19 引入 Presets · 3.20 完善 · 4.4 当前。看到 CMakeLists 里写 cmake_minimum_required(VERSION 3.20)就知道作者用了 Presets 工作流。 一句话总结版本版本 功能的入场券。3.20 是 Presets 的入场券4.4 是当前的畅通票——买新不买旧永远不卡壳。Ninja vs MakeNinja vs Make — 为什么 LKS32 项目选 NinjaCMake 支持多种后端——它生成构建规则但实际执行编译的是后端工具。Ninja 和 Make 是最常用的两个。LKS32 项目用 Ninja——因为它快得多。Ninja vs Make 全面对比对比维度MakeUnix MakefilesNinja设计目标人类可写可读Makefile 是人写的机器生成——专为 CMake 等生成器优化编译速度一般——递归 make 更慢串行处理子目录极快——自动检测 CPU 核数全部并行输出格式每个文件编译输出一行刷屏进度条 只显示错误和警告文件大小Makefile 较大且冗余build.ninja 更紧凑为机器解析优化增量编译基于时间戳——基本可靠基于时间戳 更精确的依赖追踪Windows 支持需要 MSYS2 环境原生支持 Windowsninja.exe 是独立程序LKS32 项目实测速度对比场景MakeNinja加速比首次全量编译35个文件~8 秒~4 秒2x增量编译改1个.c~2 秒~0.8 秒2.5x增量编译改1个.h~5 秒重编译所有引用者~2 秒2.5x无变动重新编译~1 秒~0.2 秒5x 为什么 Ninja 更快Make 按 Makefile 中的规则顺序串行处理Ninja 扫描整个 build.ninja 找出所有独立任务一次性并行。它不需要维护一个人类可读的格式——可以完全为执行速度优化数据结构。验证 Ninja 安装本页大纲Ninja vs Make① 为什么 CMake 默认配 Ninja → ② 速度实测对比 → ③ 两者的本质区别 → ④ 交互速度对比 → ⑤ 什么时候用 Make⚡ Ninja vs Make——为速度而生的设计哲学Make 是 1976 年的老将虽然仍活跃Ninja 是 2012 年专为构建速度设计的后浪。*Ninja 的设计目标只有一个把增量编译做得极快。*它的核心优化 速度实测对比——LKS32 项目的真实数据场景MakeNinja差距全量编译约 4.0 秒约 2.0 秒快 2x增量编译改 1 个文件约 0.5 秒约 0.2 秒快 2.5x构建系统解析每次解析 Makefile近乎零开销Ninja 胜并行度-j 参数默认全核并行Ninja 更省心 数据来源以上为 LKS32_Cmake 项目实际测量——源文件几十个、外设驱动十几个。虽然绝对时间都很快但每天编译 50 次 × 差距 2.5x累积下来非常可观。 什么时候该用 Make很少场景推荐原因纯手写 Makefile 的老项目Make已经写好了没必要改CMake 新项目嵌入式Ninja快 CMake 默认跨平台 CINinjaWin/Linux/macOS 一致需要 Make 特有功能Make极少数高级场景 本页小结Ninja 不是更好用的 Make而是*“CMake 时代的专用构建引擎”*。CMake 负责生成 build.ninjaNinja 负责极速执行——分工明确各司其职。 一句话总览选 Ninja 的原因就一个字快。全量快 2 倍、增量快 2.5 倍——每天编译几十次省下的都是实打实的时间。⚙️ 从 Make 到 Ninja——CMake 一条命令切换引擎# 用 Ninja推荐 $ cmake -S . -B build-ninja -G Ninja -- Build files have been written to: .../build-ninja build-ninja 里生成的是 build.ninja # 用 Make不推荐但可行 $ cmake -S . -B build-make -G Unix Makefiles -- Build files have been written to: .../build-make build-make 里生成的是 Makefile # 用 VSWindows 专属 $ cmake -S . -B build-vs -G Visual Studio 17 2022 build-vs 里生成的是 .sln 工程 关键洞察同一个 CMakeLists.txt 可以生成 Ninja/Make/VS 三套构建系统——这正是 CMake构建系统生成器的定位第 15 课详解。你写的 CMake 代码 100% 可移植换引擎只是 -G 参数不同。 Ninja 的并发机制——为什么它天然更快 Ninja 常见参数速查命令作用ninja -t targets列出所有可构建目标ninja -t clean清理产物等同 cmake --build --target cleanninja -v显示完整编译命令行排错用ninja -j 8指定并行数默认全核ninja -d explain解释为什么重编某个文件 日常用不到正常开发你只需 cmake --build——Ninja 参数是进阶排错时的工具。知道它们存在需要时再查。 Make vs Ninja 的完整对比表——面试也可能问维度MakeNinja诞生1976 年2012 年设计目标通用 灵活极快增量构建构建文件Makefile人写build.ninja机器生成解析开销高复杂规则极低极简格式默认并行否需 -j是全核谁生成它手写 或 CMakeCMake 生成适合场景小项目/手写CMake 大工程协作原理CMake Ninja 协作原理——configure - generate - buildCMake 的工作分为三个步骤——每一步有明确的输入和输出。理解这个流程对排查构建问题至关重要。三步构建流程全景三个关键文件的角色文件谁生成作用CMakeCache.txtcmake configure 生成存储所有检测结果——编译器路径、CPU 标志、include 目录。下次 configure 直接读缓存跳过检测。build.ninjacmake generate 生成Ninja 的配方——每一行描述一个编译/链接任务及其依赖关系。compile_commands.jsonCMAKE_EXPORT_COMPILE_COMMANDSON 时生成每个文件的完整编译命令——给 VSCode IntelliSense 用的第 10 阶段详解。 常见问题改了 CMakeLists.txt 但编译没变化——因为你只跑了 cmake --build 没有重新 cmake --preset debugconfigure。改 CMakeLists.txt 后必须重新 configure——build.ninja 才会更新。本页大纲协作原理① configure → generate → build 三步流程 → ② build.ninja 长什么样 → ③ CMakeCache 的作用 → ④ 交互三步流程模拟 → ⑤ 日常开发如何用 三步流程——CMake 构建的完整生命周期 build.ninja 长什么样——CMake 生成的施工图纸# 规则告诉 Ninja 怎么编译一个 .c 文件 rule C_COMPILER__app command arm-none-eabi-gcc -mcpucortex-m0 -mthumb -Wall -Wextra -Og -ffunction-sections -fdata-sections -I... -DUSE_HAL_DRIVER -D... deps gcc # 构建语句告诉 Ninja 编译 main.c → main.c.o build app/CMakeFiles/app.dir/main.c.o: C_COMPILER__app ../app/main.c # 依赖告诉 Ninja main.c.o 需要这些头文件 build app/CMakeFiles/app.dir/main.c.o: | ../drivers/CMSIS/Include/core_cm0.h ../drivers/HAL/Inc/hal_gpio.h 看懂 build.ninja①rule定义编译规则含所有参数→ ②build定义目标与源→ ③|后面的头文件是依赖。Ninja 靠它判断头文件变了 → 重新编译依赖它的 .c——这就是增量编译的原理。 CMakeCache.txt——configure 的记忆缓存内容示例作用编译器路径CMAKE_C_COMPILER…记住用哪个编译器构建类型CMAKE_BUILD_TYPEDebug记住是 Debug 还是 Release工具链文件CMAKE_TOOLCHAIN_FILE…记住交叉编译配置用户变量LKS32_CHIP…记住你的自定义选项 缓存的两面性好处第二次 configure 不用重算秒级完成坑改了 CMakeLists 但缓存没失效 → 配置不更新。解决删 build/ 目录重新 configure第 15 课详解。 一句话总览三步流程 configure 问怎么做→ generate 画施工图→ build 按图施工。理解这三步你就理解了 CMake 的全部运行方式。️ 日常开发中的三步流程——你每天重复的动作 这条日常循环贯穿整个系列configure 一次、build 无数次、改配置才重配——记住这个节奏你会比很多每次全量编译的同事快 10 倍。 build.ninja 与 CMakeCache 的位置——工程目录全景lks32-cmake/ └── build/ ← CMake 自动生成可删 ├── debug/ ← Debug 预设目录 │ ├── build.ninja ← 施工图纸Ninja 读它 │ ├── CMakeCache.txt ← 配置记忆configure 读它 │ ├── CMakeFiles/ ← 内部状态 │ └── lks32mc033.elf ← 最终固件 .hex/.bin └── release/ ← Release 预设目录隔离 ├── build.ninja ├── CMakeCache.txt └── lks32mc033.elf 目录隔离的意义Debug 和 Release 分开目录 两套构建互不污染。你可以在 Debug 里调试、Release 里出固件同时存在互不影响第 34 课详解。 从三步流程到日常快捷键——VSCode 里的一键操作动作VSCode 操作底层命令首次配置CtrlShiftP → CMake: Configurecmake --preset debug编译F7默认构建cmake --build改配置保存 CMakeLists 自动重配configureOnEdit 触发切预设状态栏点击 Debug/Release切换 preset清理CtrlShiftP → CMake: Cleanninja -t clean 第 39 课会完整演示现在先记住VSCode 里的每个按钮/快捷键底层都是你在本课学的三步流程。理解底层快捷键只是加速器。 进阶预告build.ninja 和 CMakeCache 是会说话的文件——当构建行为诡异时打开它们看内部状态第 15 课会教解读。它们就像飞机的黑匣子记录着构建的每一步。验证与排错验证与排错——确认一切就绪装完 CMake Ninja 后——用 LKS32 项目实测确保整个工具链链路打通。终极测试编译 LKS32 项目看到FLASH: 1280 B (3.91%)——整套工具链GCC CMake Ninja完美工作。查看 Ninja 后端生成的文件常见排错——从安装到编译问题排查与解决cmake: command not found用 UCRT64 终端非 MSYS2 终端- pacman -S mingw-w64-ucrt-x86_64-cmakeninja: command not found同上 - pacman -S mingw-w64-ucrt-x86_64-ninjaCMake Error: Could not find NinjaCMakePresets.json 的 generator 写的是 “Ninja”——确认 ninja 在 PATH 中CMakeLists.txt:1 cmake_minimum_required VERSION 3.20你的 CMake 版本低于 3.20 - pacman -Syu 升级到最新CMake Error at CMakeLists.txt:15 (add_subdirectory)源文件路径不对——确认在 LKS32_Cmake 目录下运行 cmake 三件套全部到位前七课学完环境搭建MSYS2 UCRT64终端包管理器- arm-none-eabi-gcc编译器- CMake构建生成器- Ninja并行执行引擎。下一课国内镜像加速——解决 pacman 下载慢的终极方案。本页大纲验证与排错① 终极验证真实构建一个 CMake 工程 → ② 交互排错演练 → ③ 六大常见错误 → ④ 环境总验收清单 → ⑤ 下一课预告 终极验证——用三件套真实构建一个最小工程装完三件套用最小的 CMake 工程验证整条流水线# 1. 建工程目录 $ mkdir hello_cmake cd hello_cmake # 2. 写 CMakeLists.txt $ echo cmake_minimum_required(VERSION 3.20) project(hello C) add_executable(hello main.c) CMakeLists.txt # 3. 写 main.c $ echo int main(){return 0;} main.c # 4. configure generate生成 build.ninja $ cmake -S . -B build -G Ninja -- The C compiler identification is GNU 14.x -- Configuring done -- Generating done -- Build files have been written to: /c/.../hello_cmake/build # 5. buildNinja 调 GCC 编译 $ cmake --build build [2/2] Linking C executable hello.exe ← 编译链接成功 # 6. 运行本机 x86 程序 $ ./build/hello.exe echo EXIT: $? EXIT: 0 里程碑看到 [2/2] Linking C executable CMake Ninja GCC 三件套流水线完全打通。虽然这个 hello 是 x86没加工具链文件但流程一模一样——第 19 课加入 toolchain.cmake 就变成 ARM 交叉编译了。 六大常见错误速查表#报错根因解决1‘cmake’ 不是命令PATH 缺 ucr64/bin配 PATH 重启终端2Unable to find a build programNinja 未装pacman -S …-ninja3CMake 3.18 or higher required版本过低pacman -Syu 后重装 cmake4配置改了不生效CMakeCache 缓存删 build/ 重新 configure5编译器识别失败toolchain 路径错检查 CMAKE_TOOLCHAIN_FILE6下载依赖超时镜像源慢第 08 课切国内镜像✅ 环境总验收清单——第二阶段的毕业考试#检查项命令预期1GCC 交叉编译器arm-none-eabi-gcc --versionTarget: arm-none-eabi2CMake 版本cmake --version≥ 3.20当前 4.43Ninja 版本ninja --version1.13.x4三件套 PATHwhich gcc cmake ninja全部指向 ucr64/bin5最小工程构建本页 Tab 5 的 hello 工程[2/2] Linking 成功6环境快照pacman -Q packages.txt已备份 第二阶段收官六项全过 你的 Windows ARM 开发环境彻底就绪。下一课第 08 课是环境搭建的最后一课国内镜像加速——解决 pacman 下载慢的终极方案让 100 MB 的下载从 10 分钟变 10 秒。 本课记忆锚点CMake 是大脑、Ninja 是施工队长、GCC 是工人——三件套 三步流程configure→generate→build这是你之后每一课都会用到的基础设施。 第 07 课知识地图——构建系统的完整认知 本课毕业标准——看完这页你该带走什么能力验收方式独立安装 CMakeNinja不查资料敲出两条 pacman 命令解释三件套分工能说清 CMake 大脑 / Ninja 调度 / GCC 执行讲清版本门槛能解释为什么 ≥3.20Presets对比 Ninja vs Make能说出速度差距与原因解析开销跑通三步流程能构建一个最小 CMake 工程 第 07 课与全系列的位置阶段内容课程环境搭建进行中MSYS2 → GCC → CMakeNinja → 镜像第 05-08 课构建模型下一步两阶段构建、Target、依赖传播第 15-18 课Presets 深入后续双预设、多芯片、环境注入第 33-35 课 第二阶段预告第 08 课镜像加速是环境搭建收官——装完后你会拥有高速下载 完整工具链 可复现环境的三重保障。然后第 09 课开始 CMake 语法之旅 踩坑预警如果 configure 报 CMAKE_MAKE_PROGRAM not set——多半是 Ninja 没装或 PATH 没配好。回到第 05-06 课的 PATH 排查三步曲5 分钟内解决。 学习节奏建议本课偏操作型——装完立刻动手跑最小工程比反复读文字强 10 倍。10 分钟装完 5 分钟跑通最小工程本课就毕业了。