HiveBrain v1.2.0
Get Started
← Back to all entries
snippetrustCritical

How can I build multiple binaries with Cargo?

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
withhowmultiplebinariescancargobuild

Problem

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.

Solution

You can specify multiple binaries using [[bin]], as mentioned in the Cargo Book
[[bin]]
name = "daemon"
path = "src/daemon/bin/main.rs"

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


You can run individual binaries with the cargo run command with the --bin option.

Tip: If you instead put these files in src/bin/daemon.rs and src/bin/client.rs, you'll get two executables named daemon and client as Cargo compiles all files in src/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.

Context

Stack Overflow Q#36604010, score: 390

Revisions (0)

No revisions yet.