簡體   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