Cargo

4 文章

发布 CLI、crate 和版本管理

4 分钟

C 项目交付给别人用时,问题通常不在“源码能不能编译”,而在这些细节:

工具怎么安装到 PATH
库文件和头文件放在哪里
用户该链接哪个版本
升级会不会破坏已有代码
公开 API 改了算不算兼容
二进制 ABI 能不能长期稳定

Rust 也要处理这些问题。只是发布对象分成了两类:

阅读更多

release、交叉编译和 binary size

5 分钟

C 项目交付前,通常不会只看“能编译”。

还要看:

是不是 release 优化
目标架构和 ABI 对不对
链接的是目标系统的库还是宿主机库
二进制有没有带多余符号
动态库依赖目标系统有没有
体积是否符合设备限制
崩溃后还能不能符号化

Rust 交付 CLI、系统库或 C/Rust 边界产物时,也要回答这些问题。Cargo 简化了构建命令,但没有取消交付检查。

阅读更多

workspace、feature 和构建配置

4 分钟

C 项目长大以后,通常会出现这些东西:

多个静态库和命令行工具
公共头文件和内部头文件
Makefile 子目录
CONFIG_XXX / #ifdef 开关
Debug/Release 编译选项
目标平台差异

Rust 项目也会遇到同样的问题,只是工具名字不同:

workspace -> 管多个 crate
crate     -> 一个库或一个可执行目标的边界
feature   -> 可选能力和可选依赖
profile   -> debug/release 等构建参数
cfg       -> 平台和条件编译

这一篇不讲 Cargo 全部语法,只讲写库、CLI 和 C/Rust 边界时最常用的工程组织方式。

阅读更多