多个可执行文件使用私有模块的正确位置
Correct place for private module to be used by multiple executables
两个可执行文件的源代码 foo.rs
和 bar.rs
位于 src/bin
.
src/bin/common.rs
中存在私有通用功能。
foo.rs
和 bar.rs
包含此功能:
mod common;
use common::{Bish, Bash, Bosh};
这行得通,但是 src/bin/common.rs
对于不会构建到可执行文件中的东西来说感觉不是正确的路径。
将 common.rs
移动到 src
或 src/lib
会阻止 foo.rs
和 bar.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.rs
和 bar.rs
:
#[path = "../common.rs"]
mod common;
use common::{Bish, Bash, Bosh};
另见:
两个可执行文件的源代码 foo.rs
和 bar.rs
位于 src/bin
.
src/bin/common.rs
中存在私有通用功能。
foo.rs
和 bar.rs
包含此功能:
mod common;
use common::{Bish, Bash, Bosh};
这行得通,但是 src/bin/common.rs
对于不会构建到可执行文件中的东西来说感觉不是正确的路径。
将 common.rs
移动到 src
或 src/lib
会阻止 foo.rs
和 bar.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.rs
和 bar.rs
:
#[path = "../common.rs"]
mod common;
use common::{Bish, Bash, Bosh};
另见: