我想用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)