Skip to content

Cargo Workspace 是 Rust 的多 crate 管理机制,Codex 使用它组织 119 个 crate,实现模块化构建和依赖共享。

为什么需要 Cargo Workspace

Codex 是一个大型项目,包含核心引擎、多种界面(TUI/Exec)、协议定义、沙箱系统、SDK 等。使用 Cargo Workspace 将不同职责的代码拆分为独立 crate,实现编译隔离(修改 TUI 不需要重编核心)、依赖共享(统一管理 tokio/serde 等版本)和并行构建(cargo 利用多核并行编译多个 crate)。

核心原理

  1. 统一管理codex-rs/Cargo.toml[workspace] 段定义所有 119 个成员 crate,[workspace.dependencies] 统一管理共享依赖版本
  2. 分层依赖protocol/config 作为最底层类型库 → core 作为业务核心 → app-server 作为通信层 → tui/exec/cli 作为界面层
  3. 编译优化:release profile 使用 lto = "fat"codegen-units = 1 进行全链接时优化
  4. 多二进制目标:从同一 workspace 构建出 codex(CLI)、codex-tuicodex-execcodex-linux-sandbox 四个独立二进制

在源码中的实现

  • codex-rs/Cargo.toml — workspace 根配置,119 个 members、共享依赖、profile 设置
  • codex-rs/protocol/src/lib.rs — 跨 crate 共享的类型定义(EventMsgTurnItem 等)
  • codex-rs/config/src/lib.rs — 配置类型库,被所有上层 crate 依赖
  • codex-rs/core/src/lib.rs — 核心业务 crate,60+ 内部模块

相关概念