我想创建一个带有守护进程和客户机的项目,通过unix套接字连接。
客户机和守护进程需要两个二进制文件,那么如何告诉Cargo从两个不同的源构建两个目标呢?
为了增加一点幻想,我希望有一个用于守护进程的主要部分的库,并有一个二进制文件来包裹它并通过套接字进行通信。
所以,我们有这样的树形结构:
├── Cargo.toml
├── target
| └── debug
| ├── daemon
│ └── client
└── src
├── daemon
│ ├── bin
│ │ └── main.rs
│ └── lib
│ └── lib.rs
└── client
└── bin
└── main.rs
我可以让一个可执行文件同时管理两个关注点,但这不是我想做的,除非这是很好的实践。
另一种方法是使用工作区特性。这将提供更大的灵活性,因为我们可以拥有多个库。项目结构示例:
.
├── Cargo.toml
├── cli
│ ├── Cargo.toml
│ └── src
│ └── main.rs
├── core
│ ├── Cargo.toml
│ └── src
│ └── lib.rs
├── daemon
│ ├── Cargo.toml
│ └── src
│ └── main.rs
├── gui
│ ├── Cargo.toml
│ └── src
│ └── main.rs
└── rpc
├── Cargo.toml
└── src
└── lib.rs
根目录Cargo.toml的内容:
[workspace]
members = ["cli", "core", "daemon", "gui", "rpc"]
另一种方法是使用工作区特性。这将提供更大的灵活性,因为我们可以拥有多个库。项目结构示例:
.
├── Cargo.toml
├── cli
│ ├── Cargo.toml
│ └── src
│ └── main.rs
├── core
│ ├── Cargo.toml
│ └── src
│ └── lib.rs
├── daemon
│ ├── Cargo.toml
│ └── src
│ └── main.rs
├── gui
│ ├── Cargo.toml
│ └── src
│ └── main.rs
└── rpc
├── Cargo.toml
└── src
└── lib.rs
根目录Cargo.toml的内容:
[workspace]
members = ["cli", "core", "daemon", "gui", "rpc"]