如何在 Cargo 包中的两个二进制文件之间使用共享模块?

问题描述 投票:0回答:1

我的项目有一个客户端和一个服务器二进制文件。所以我的

Cargo.toml
看起来像

[[bin]]
name = "server"
path = "src/server/mod.rs"

[[bin]]
name = "client"
path = "src/client.rs"

我的文件结构看起来像:

.
├── client.rs
├── server
│   ├── something.rs
│   └── mod.rs
└── shared
    ├── mod.rs
    └── something2.rs

我想做的是使用

shared
中的
server/mod.rs
中的任何内容。为此,我尝试在
mod shared
中添加
use crate::shared
server/mod.rs
,但收到错误“根中没有‘共享’”(它只在
shared/
中查找)。我没有
main.rs
可以正确声明模块。

所以我尝试的另一件事是使用

server.rs
而不是
server/mod.rs
。这部分有效,因为我现在可以声明 mod 共享。但是,我无法再访问
server/something.rs
中的任何内容。有没有办法让
server.rs
看到
server/
的内容,或者有没有办法让
server/mod.rs
看到相邻模块的内容而不需要顶层
main.rs

rust rust-cargo
1个回答
2
投票

您可以使用

#[path]
属性:

#[path = "../shared/mod.rs"]
mod shared;

但是正确的方法是除了

client
server
之外,还有一个库,并让两者都依赖于它。

© www.soinside.com 2019 - 2024. All rights reserved.