Rust 如何使用Cargo构建多个二进制文件?
我想用Rust 如何使用Cargo构建多个二进制文件?,rust,rust-cargo,Rust,Rust Cargo,我想用守护进程和客户端创建一个项目,通过unix套接字连接 一个客户端和一个守护进程需要两个二进制文件,那么我如何告诉Cargo从两个不同的源构建两个目标呢 为了增加一点幻想,我想为守护进程的主要部分提供一个库,并且只需要一个二进制文件来封装它并通过套接字进行通信 因此,我们有这种树结构: ├── Cargo.toml ├── target | └── debug | ├── daemon │ └── client └── src ├── daemon
守护进程
和客户端
创建一个项目,通过unix套接字连接
一个客户端
和一个守护进程
需要两个二进制文件,那么我如何告诉Cargo
从两个不同的源构建两个目标呢
为了增加一点幻想,我想为守护进程的主要部分提供一个库
,并且只需要一个二进制文件来封装它并通过套接字进行通信
因此,我们有这种树结构:
├── Cargo.toml
├── target
| └── debug
| ├── daemon
│ └── client
└── src
├── daemon
│ ├── bin
│ │ └── main.rs
│ └── lib
│ └── lib.rs
└── client
└── bin
└── main.rs
我可以制作一个可执行文件来管理这两个问题,但这不是我想要做的,除非这是一个非常好的实践。您可以使用[[bin]]
指定多个二进制文件,如前所述:
提示:如果您将这些文件放在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"]
如果您有一个大型项目,另一种形式可以是复制所做的工作,例如:
src中的主库,带有包含可执行文件的Bin文件夹。
然后从可执行文件调用主库板条箱
通过这种方式,您可以集中化库,以便在缓存时更容易地查找内容 高度相关:。作为答案的补充,他们回答了我所有的问题。多谢各位!我已经看过货物的文档了,但是我看不到任何东西,可以指定输出来存储二进制文件吗?例如,pathTo:“/some/path”我对我的英语很抱歉。如果您认为创建一个关于此问题的问题更好,我可以毫无问题地完成此操作,找到具有相同问题的其他人可能会更容易?@AngelAngel是否要自定义输出路径?默认情况下,它将存储在target/debug/$name
中,其中$name
是您在Cargo.toml中指定的名称。我只是想知道您是否可以在默认设置之外的其他位置安装二进制文件的副本。$name中的一个副本和另一个路径中的另一个副本。并不是说它很琐碎,只是好奇,谢谢您的时间。@AngelAngel我想您正在寻找货物安装
命令。尝试读取货物帮助安装的输出。我无法使其工作。我必须移动src/文件夹中的二进制锈源,并在[[bin]]
中指定另一个目标。你能详细说明一下你是怎么做到的吗?我得到了以下错误:use::engine::RuleEngine代码>在{{root}}中找不到引擎
@KennyBambridge我已经有一段时间没有处理锈迹了。IIRC当我创建了这个答案后,我在本地机器上进行了尝试,它可以正常工作。@KennyBambridge您必须在其他工作区中添加板条箱,作为您要使用它们的Cargo.toml中的依赖项。
[workspace]
members = ["cli", "core", "daemon", "gui", "rpc"]