I'd like to make a project with a daemon
and a client
, connecting through a unix socket.
A client
and a daemon
requires two binaries, so how do I tell Cargo
to build two targets from two different sources?
To add a bit of fantasy, I'd like to have a library
for the main part of the daemon
, and just have a binary to wrap around it and communicate through sockets.
So, we have this kind of tree architecture:
├── Cargo.toml
├── target
| └── debug
| ├── daemon
│ └── client
└── src
├── daemon
│ ├── bin
│ │ └── main.rs
│ └── lib
│ └── lib.rs
└── client
└── bin
└── main.rs
I could make one executable which manages both concerns, but that's not what I want to do, unless it's very good practice.
Best Answer
You can specify multiple binaries using
[[bin]]
, as mentioned here:Tip: If you instead put these files in
src/bin/daemon.rs
andsrc/bin/client.rs
, you'll get two executables nameddaemon
andclient
as Cargo compiles all files insrc/bin
into executables with the same name automatically. You need to specify names and paths like in the snippet above only if you don't follow this convention.