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

解决Rust crate单库多二进制限制:扫雷项目结构优化

优化Rust扫雷项目结构的两种方案

你的核心诉求是让Cargo仅将main.rs和debug_main.rs视为可执行文件,同时妥善存放TUI前端的依赖代码(app、event等),以下是两种可行方案:

方案一:将TUI依赖代码整合到核心库中

适合希望TUI相关逻辑也能被其他潜在前端复用的场景:

  1. 调整目录结构:在src目录下新建tui子目录,将原bin目录下的app.rs、event.rs、game_ui.rs、menu_ui.rs、tui.rs、update.rs全部移动到src/tui下。
  2. 声明库模块:在src/lib.rs中添加:
    pub mod tui;
    
    同时新建src/tui/mod.rs文件,导出子模块:
    pub mod app;
    pub mod event;
    pub mod game_ui;
    pub mod menu_ui;
    pub mod tui;
    pub mod update;
    
  3. 修改main.rs的引用:将原mod声明替换为库模块引用:
    use miners::tui::{app, event, game_ui, menu_ui, tui, update};
    
  4. 清理bin目录:此时bin目录仅保留main.rs和debug_main.rs,Cargo会自动将这两个文件作为独立可执行目标编译。

方案二:为TUI前端创建独立的子目录入口

适合希望TUI逻辑与核心库完全隔离的场景:

  1. 调整bin目录结构:在bin目录下新建miners_tui子目录,将原bin目录下的main.rs、app.rs、event.rs等TUI相关文件全部移动到该子目录中,仅保留debug_main.rs在bin根目录。
  2. 配置Cargo.toml:添加二进制目标的路径声明,明确指定需要编译的可执行文件:
    [[bin]]
    name = "miners"
    path = "bin/miners_tui/main.rs"
    
    [[bin]]
    name = "debug_miners"
    path = "bin/debug_main.rs"
    
  3. 保留原有引用逻辑:因为所有依赖文件和main.rs同属一个子目录,原有的mod声明无需修改,Cargo会正确识别它们是miners可执行文件的内部模块,不会单独编译。

额外说明

  • 两种方案都不会影响核心库的发布(crates.io只会发布src目录下的库代码)。
  • 方案一中如果不希望TUI模块被外部用户访问,可以将pub mod tui改为mod tui,仅让内部二进制目标通过use crate::tui::...引用。

内容的提问来源于stack exchange,提问作者smellyshovel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:58:12