在 Rust 中使用父目录中的模块

wil*_*lit 2 module rust

是否有可能以这种方式构建 Rust 项目?

目录结构:

src
??? a
?   ??? bin1.rs
??? b
?   ??? bin2.rs
??? common
    ??? mod.rs
Run Code Online (Sandbox Code Playgroud)

来自 Cargo.toml:

[[bin]]
name = "bin1"
path = "src/a/bin1.rs"

[[bin]]
name = "bin2"
path = "src/b/bin2.rs"
Run Code Online (Sandbox Code Playgroud)

我希望能够commonbin1.rs和 中使用该模块bin2.rs。可以通过在导入之前添加 path 属性来实现:

#[path="../common/mod.rs"]
mod code;
Run Code Online (Sandbox Code Playgroud)

有没有一种方式bin1.rs,并bin2.rs在使用common,而不必硬编码路径?

Ali*_*yhl 6

在二进制文件之间共享代码的推荐方法是拥有一个src/lib.rs文件。两个二进制文件都可以自动访问通过此lib.rs文件访问的任何内容作为单独的包。

然后您只需mod common;src/lib.rs文件中定义 a 即可。如果您的 crate 被调用my_crate,您的二进制文件将能够使用它

use my_crate::common::Foo;
Run Code Online (Sandbox Code Playgroud)