[Rust] Workspace,Package, Crate 和 Module

package(包)

一个 package 对应一个项目,package 的信息在 Cargo.toml 里面定义。

crate(木箱、箱子)

crate 指的是 package 编译后的输出文件。以 Windows 为例,可能会产生 .exe 文件或者 .rlib 文件。
crate 有两种类型: executable(可执行的) 和 library(库)。
一个 package 可以包含 0 到 n 个 可执行的 crate,和 0 到 1 个 library。
如果,想要在一个 package 里只生成一个可执行的文件,只要写 src/main.rs文件就可以了。
如果,想要在一个 package 里只生成一个库文件,只要写 src/lib.rs文件就可以了。
如果,想要在一个 package 里生成多个可执行的文件和一个库文件,需要在 src/bin目录下放入多个含有main()函数的 rust 文件;和 一个 src/lib.rs文件。这种方法有点儿奇怪,所以建议避免使用这种模式,而使用 workspace 来管理多个编译结果。

module(模块)

一个 rust 文件对应一个 module。module 里可以内嵌多个 module。

workspace(工作空间)

通常,我们期望一个 package 只产生一个 crate(编译结果)。
当需要管理多个项目的时候,workspace 提供了一种更友好的方式。
一个 workspace 是一个目录,含一个 Cargo.toml 文件,并且让包含的 packages 共享一个Cargo.lock,统一了依赖。
所有 packages 的输出都会放到 workspace 的 target 目录里。

一个典型的 workspace 目录结构:

├── Cargo.lock
├── Cargo.toml
├── add-one
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
├── adder
│   ├── Cargo.toml
│   └── src
│       └── main.rs
└── target

workspace 的定义文件: Cargo.toml

[workspace]

members = [
    "adder",
    "add-one",
]

参照

posted @   SNYang  阅读(688)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2017-03-30 强化学习总结
点击右上角即可分享
微信分享提示