如何将Rust项目拆分为main.rs和lib.rs并实现二者关联?
核心逻辑说明
在标准Cargo管理的Rust项目中,只要同项目下存在src/lib.rs文件,Cargo会自动将其识别为当前包的库目标,无需在Cargo.toml中做额外的依赖配置,仅需遵循Rust的可见性规则导出对应内容,即可在main.rs中直接调用。
1. lib.rs 侧的内容导出
你需要为所有需要对外暴露的函数、结构体、枚举、模块等项添加pub关键字,示例如下:
// src/lib.rs // 导出顶层函数 pub fn greet(name: &str) -> String { format!("Hello, {}!", name) } // 导出模块,模块内部需要对外暴露的项也需要加pub pub mod utils { pub fn calculate_sum(a: i32, b: i32) -> i32 { a + b } // 未加pub的私有项,外部无法访问 fn private_helper() { // 内部逻辑 } }
2. main.rs 侧的内容调用
调用时使用你的项目包名作为根路径即可,包名可在项目根目录的Cargo.toml中name字段查看,假设你的包名为demo_project,调用示例如下:
// src/main.rs // 导入lib.rs导出的项 use demo_project::{greet, utils}; fn main() { // 调用lib导出的顶层函数 println!("{}", greet("User")); // 调用lib导出模块下的公开函数 println!("Sum result: {}", utils::calculate_sum(3, 5)); }
注意:Rust 2018及更高版本无需额外添加
extern crate声明,可直接通过包名引用库目标内容。
常见注意事项
- 只有添加了
pub关键字的公开项才能被main.rs访问,私有项即使在同包的库目标中也无法跨目标调用 - 如果你有多个二进制入口文件(存放在
src/bin/目录下),引用lib.rs内容的规则和上述main.rs完全一致 - 如果你的项目使用了工作空间(Workspace)结构,需要在对应二进制包的
Cargo.toml中手动添加对库包的依赖声明
内容的提问来源于stack exchange,提问作者RowSalmon
相关产品推荐
相关产品推荐

