[英]How can I build multiple binaries with Cargo?
我想用一个daemon
和一个client
制作一个项目,通过 unix socket 连接。
一个client
和一个daemon
需要两个二进制文件,那么我如何告诉Cargo
从两个不同的来源构建两个目标呢?
为了增加一点幻想,我想为daemon
的主要部分提供一个library
,并且只需要一个二进制文件来包装它并通过套接字进行通信。
所以,我们有这种树结构:
├── Cargo.toml
├── target
| └── debug
| ├── daemon
│ └── client
└── src
├── daemon
│ ├── bin
│ │ └── main.rs
│ └── lib
│ └── lib.rs
└── client
└── bin
└── main.rs
我可以制作一个管理这两个问题的可执行文件,但这不是我想要做的,除非这是非常好的做法。
您可以使用指定多个二进制文件[[bin]]
提到这里:
[[bin]]
name = "daemon"
path = "src/daemon/bin/main.rs"
[[bin]]
name = "client"
path = "src/client/bin/main.rs"
提示:如果您将这些文件放在src/bin/daemon.rs
和src/bin/client.rs
,您将获得两个名为daemon
和client
可执行文件,因为 Cargo 会将src/bin
所有文件编译为具有相同名称的可执行文件自动。 仅当您不遵循此约定时,才需要像上面的代码片段一样指定名称和路径。
另一种方法是使用工作区功能。 由于我们可以拥有多个库,这将提供更大的灵活性。 示例项目结构:
.
├── 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"]
另一种格式可能是复制Crates.io 源代码所做的事情,如果您有一个庞大的项目,例如:
src 中的主库,带有包含可执行文件的 Bin 文件夹。 然后从您的可执行文件调用您的主库 crate。
这样,您的库是集中的,因此在缓存时更容易查找内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.