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

Ral*_*nRl 58 rust rust-cargo

我想用a daemon和a 创建一个项目client,通过unix socket连接.

A client和a daemon需要两个二进制文件,那么如何判断Cargo从两个不同的源构建两个目标?

为了增加一些幻想,我希望有一个library主要部分daemon,并且只需要一个二进制文件来包裹它并通过套接字进行通信.

所以,我们有这种树架构:

??? Cargo.toml
??? target
|   ??? debug
|       ??? daemon
?       ??? client
??? src
    ??? daemon
    ?   ??? bin
    ?   ?   ??? main.rs
    ?   ??? lib
    ?       ??? lib.rs
    ??? client
        ??? bin
            ??? main.rs
Run Code Online (Sandbox Code Playgroud)

我可以制作一个管理这两个问题的可执行文件,但这不是我想要做的,除非这是非常好的做法.

Dog*_*ert 78

您可以指定使用多个二进制文件[[bin]],提到这里:

[[bin]]
name = "daemon"
path = "src/daemon/bin/main.rs"

[[bin]]
name = "client"
path = "src/client/bin/main.rs"
Run Code Online (Sandbox Code Playgroud)

提示:如果您将这些文件放入src/bin/daemon.rs和中src/bin/client.rs,您将获得两个可执行文件daemon,client并且Cargo 会将所有文件src/bin自动编译为具有相同名称的可执行文件.只有在不遵循此约定时,才需要在上面的代码段中指定名称和路径.


Ult*_*pon 33

另一种方法是使用工作区功能。由于我们可以拥有多个库,这将提供更大的灵活性。示例项目结构:

.
??? 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
Run Code Online (Sandbox Code Playgroud)

根目录的内容Cargo.toml

[workspace]
members = ["cli", "core", "daemon", "gui", "rpc"]
Run Code Online (Sandbox Code Playgroud)

  • 我无法让它发挥作用。我必须将二进制 rust 源移动到 src/ 文件夹中,并在“[[bin]]”中指定另一个目标。您能否提供更多有关您为使其发挥作用所做的工作的详细信息?我收到以下错误:`use ::engine::RuleEngine;``在 {{root}} 中找不到引擎` (2认同)