繁体   English   中英

如何使用 Cargo 构建多个二进制文件?

[英]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.rssrc/bin/client.rs ,您将获得两个名为daemonclient可执行文件,因为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM