You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:36:04