How can I build multiple binaries with Cargo?

后端 未结 3 706
离开以前
离开以前 2020-12-04 08:36

I\'d like to make a project with a daemon and a client, connecting through a unix socket.

A client and a daemon

相关标签:
3条回答
  • 2020-12-04 09:14

    You can specify multiple binaries using [[bin]], as mentioned here:

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

    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.

    0 讨论(0)
  • 2020-12-04 09:19

    Another way is to use the workspace feature. This will provide more flexibility due to the fact that we can have more than one library. Example project structure:

    .
    ├── 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
    

    Contents of the root Cargo.toml:

    [workspace]
    members = ["cli", "core", "daemon", "gui", "rpc"]
    
    0 讨论(0)
  • 2020-12-04 09:26

    Another format could be to replicate what the Crates.io source code has done, if you have a massive project, something like:

    Main Library in src, with a Bin folder with your executables. Then make calls to your main library crate from your executables.

    That way you library is centralized so easier to find things as it's cached.

    0 讨论(0)
提交回复
热议问题