当前位置: 首页 > ops >正文

对比**CMake** 和 **PlatformIO** 构建嵌入式项目方式

下面是 CMakePlatformIO 构建项目方式的详细对比,从项目结构、配置方式、构建流程、适用场景、优缺点等多个维度说明它们的异同:


🧱 1. 📁 项目结构对比

🔧 CMake 项目结构(通用 C++ / 嵌入式也可)

MyProject/
├── CMakeLists.txt
├── src/
│   └── main.cpp
├── include/
│   └── myheader.h
├── build/
└── toolchain.cmake        # 仅嵌入式用

🔌 PlatformIO 项目结构(嵌入式)

MyPIOProject/
├── platformio.ini
├── src/
│   └── main.cpp
├── include/
│   └── myheader.h
├── lib/
│   └── custom_lib/
├── .pio/
└── .vscode/

⚙️ 2. 构建配置方式

对比项CMakePlatformIO
配置文件CMakeLists.txt(脚本语言)platformio.ini(INI格式)
工具链设置手动指定 toolchain.cmake 或环境变量自动内置并识别开发板对应工具链
添加源文件file(GLOB ...) 或手动列表默认编译 src/ 下所有文件
添加库target_link_libraries()lib_depslib/ 目录自动加载
串口烧录/上传需自写脚本/调用外部工具内置烧录逻辑,支持 upload 命令
调试支持需自建 GDB + OpenOCD 环境自带调试器支持(取决于开发板)
支持平台全平台,包括 Linux/Windows/macOS/嵌入式主要为嵌入式(ESP32、STM32、Arduino 等)

🚀 3. 构建 & 上传命令对比

操作CMake 命令PlatformIO 命令
配置项目cmake ..自动完成,无需额外配置
编译项目cmake --build .makeplatformio run
上传固件❌ 需手动调用工具(如 esptool.pyplatformio run --target upload
打开串口监视❌ 手动打开 minicom / screenplatformio device monitor
添加库自己下载、解压、link自动通过库管理器

📦 4. 库管理方式

特性CMakePlatformIO
官方库支持❌ 无内建库管理✅ 内建数千个库
添加外部库通过 FetchContentadd_subdirectorylib_deps = 库名
私有库手动管理(如 Git 子模块)放入 lib/ 或通过 Git/URL 安装

🔬 5. 示例项目构建差异

🔧 用 CMake 构建

mkdir build
cd build
cmake ..
make
./MyProject   # 如果是桌面程序

🔌 用 PlatformIO 构建并上传(适用于 MCU)

platformio run                # 构建
platformio run --target upload  # 编译+上传到开发板
platformio device monitor     # 串口调试

✅ 6. 适用场景对比总结

场景推荐工具原因
桌面应用(Linux/Windows)✅ CMake灵活支持多平台,通用构建系统
跨平台库开发✅ CMake支持静态/动态库构建,容易集成
简单 Arduino / ESP32 项目✅ PlatformIO快速开发,封装上传、串口监控、库管理等
复杂嵌入式系统(RTOS、HAL)✅ CMake (高级)灵活性高但更复杂,需要手动设置工具链和链接脚本
快速集成第三方库✅ PlatformIO一行配置即可添加,适合原型设计

🟡 7. 优缺点总结

工具优点缺点
CMake灵活强大,通用于任何项目类型;支持复杂构建逻辑;跨平台上手略难,嵌入式使用需手动设置工具链和上传流程
PlatformIO快速上手;一键构建上传调试;内建库管理器;支持 VSCode 插件较封闭,不适合非嵌入式项目;某些定制构建流程不如 CMake 灵活

PlatformIO 很难修改工具链和链接文件(pio run 会根据你的paltform bord framework 配置自动去调用)。另外,用的库如果需要修改需要复制到lib中。


🎯 结论

  • 想做桌面/跨平台项目 → ✅ 用 CMake
  • 想做ESP32 / Arduino 嵌入式项目 → ✅ 用 PlatformIO
  • STM32 CMSIS/HAL 项目推荐使用STMCubeMX生成的CubeIDE项目(CMake)
  • 想做可维护的大型嵌入式项目,但不依赖 PlatformIO → ✅ 可选 CMake + 手动上传脚本

http://www.xdnf.cn/news/13469.html

相关文章:

  • C++(5)
  • Wordpress安装插件提示输入ftp问题解决
  • AIStarter一键启动平台:轻松运行AI项目,无需复杂配置
  • 五种IO模型与阻塞IO
  • LeetCode - 1047. 删除字符串中的所有相邻重复项
  • dockerfile 简单搭建 和 supervisor 进程管理工具
  • JAVASE:方法
  • 亚远景-ASPICE在汽车软件全生命周期管理中的作用
  • 7. 整数反转
  • 探索奇妙的LLM应用:提高工作效率的AI代理和RAG合集
  • Jemily张洁领域成就概述:匠心筑品牌,革新引航家用电梯新征程
  • 31.Python编程实战:自动化批量压缩与解压文件
  • GoldenDB简述
  • 【DVWA系列】——xss(DOM)——High详细教程
  • debian12 修改MariaDB数据库存储位置报错
  • 界面控件Kendo UI在实战应用——打通数据链路,重塑业务效率
  • UE5 蓝图按键控制物体旋转、暂停
  • Android NDK: Could not find application project directory
  • 【Mac技巧】修复Mac应用程序无法打开的解决办法
  • tryhackme 之反弹 shell 理解
  • FastAPI的数据契约:Pydantic与SQLModel联手打造健壮API
  • 斐讯N1部署Armbian与CasaOS实现远程存储管理
  • JS之Dom模型和Bom模型
  • strs[0] == “0“是否为字符串内容比较
  • 在GIS 工作流中实现数据处理(2)
  • 想考Kubernetes认证?CKA考试内容与报名全解析
  • 华测CGI-430配置
  • RAG文档解析难点3:Excel多层表头的智能解析与查询方法
  • Linux操作系统-性能优化
  • 电路图识图基础知识-行程开关自动往返运行控制电路详解(二十三)