在STM32CubeMX中,如果选择CMake建立工程的话,构建工具并不是Linux中常用的make,而一个叫做Ninja的工具。Ninja,它是什么?为什么STM32选择它?
Ninja:构建执行的极致效率引擎
Ninja是一款专注于极致构建速度的轻量级构建系统,广泛应用于大型 C/C++ 项目(如 Chromium、LLVM、Qt)及跨平台开发场景。它通常不直接手写配置,而是由 CMake、Meson 等元构建系统生成 build.ninja 文件后执行编译任务。
极速构建:启动开销极低,并行调度算法优化,相比传统 Make 工具速度提升显著,尤其适合大型项目的增量构建, ninja -j4可充分利用多核CPU资源。在大型 STM32项目中(>100个源文件),Ninja的全量构建耗时通常仅为Make的1/3。
精准依赖管理:通过文件哈希和时间戳双重校验,仅重新编译修改的文件及其依赖,避免冗余操作。
跨平台通用:原生支持 Windows、Linux 和 macOS,统一构建逻辑,兼容 MSVC、GCC、Clang 等多种编译器。
极简设计:语法简单,无隐式规则,所有编译动作必须显式声明,杜绝因规则冲突导致的构建失败。build.ninja 文件机器可读性强,专注于执行构建图,无复杂内置规则。虽然都是由CMak生成,但其比起make来说,阅读起来更轻松。
Ninja:零学习成本
Ninja使用的build.ninja文件也由CMake生成,只是命令中稍有区别。
cmake -G "Ninja" .. ninja
看了吧!基本上只是把make命令给替换一下而已。剩下的事情完全由CMake与ninja默默地干完了。简单吧!学习起来没有成本了吧!
总结
Ninja 本身不提供可视化工程文件,需依赖上层工具(如 CMake)生成配置。在 STM32 嵌入式开发中,使用Ninja作为构建执行器,配合CMake和ARM GCC工具链,以替代传统Keil或IAR IDE的现代化开发方案。这种组合能显著提升编译速度、增强版本控制兼容性,并优化自动化流程。
我要赚赏金
