多个可执行文件使用私有模块的正确位置

Correct place for private module to be used by multiple executables

两个可执行文件的源代码 foo.rsbar.rs 位于 src/bin.

src/bin/common.rs 中存在私有通用功能。

foo.rsbar.rs 包含此功能:

mod common;
use common::{Bish, Bash, Bosh};

这行得通,但是 src/bin/common.rs 对于不会构建到可执行文件中的东西来说感觉不是正确的路径。

common.rs 移动到 srcsrc/lib 会阻止 foo.rsbar.rs 看到它。

我应该把 common.rs 放在哪里,然后如何导入它?

将共享部分存储在 lib.rs 并在二进制文件中使用它们的常用方法。不过,它的用法与简单的 mod + use 有点不同。事实上,library 是一个单独的 crate,因此您需要通过 crate 名称(在 Cargo.toml 中定义)访问它。

Cargo.toml:

[package]
name = "crate-name"
# ... the rest

src/bin/foo.rs:

fn main() {
  crate_name::fun();
}

src/lib.rs:

pub fn fun() {}
example
├── Cargo.toml
└── src
    ├── bin
    │   ├── bar.rs
    │   └── foo.rs
    ├── common.rs
    └── lib.rs

foo.rsbar.rs:

#[path = "../common.rs"]
mod common;
use common::{Bish, Bash, Bosh};

另见: