user51
user51

Reputation: 10223

How to build multi workspace cargo project in rust

I have multi-workspace Cargo project. It has two workspaces, common and server. common is a lib project and server is a bin project.

The location of the project in Github is here.

Below is the project structure.

.
├── Cargo.toml
├── common
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
├── README.md
└── server
    ├── Cargo.toml
    └── src
        └── main.rs

4 directories, 6 files

And the file contents of ./Cargo.toml file is

[package]
name = "multi_module_cargo_project"
version = "0.1.0"
authors = ["rajkumar"]

[workspace]
members = ["common", "server"]

[dependencies]

When I run the command cargo build --all:

error: failed to parse manifest at `/home/rajkumar/Coding/Rust/ProgrammingRust/multi_module_cargo_project/Cargo.toml`

Caused by:
no targets specified in the manifest
either src/lib.rs, src/main.rs, a [lib] section, or [[bin]] section must be present

So I added below in Cargo.toml but still couldn't build the project.

[[bin]]
name = "server/src/main.rs"

How can I build the project. What I'm missing?

Upvotes: 6

Views: 9407

Answers (1)

Sven Marnach
Sven Marnach

Reputation: 602245

You included a [package] section in your main Cargo.toml file. This section indicates that you want to build a main package in addition to the packages in the workspace. However, you don't have any source files for the main package, so Cargo complains.

The solution is to simply omit the [package] section, and only include [workspace]. This configures a virtual workspace – a workspace that is only a container for member packages, but does not build a package itself.

See the main Cargo.toml file of Rocket for a real-world example of a virtual workspace, and Tokio for a real-world example of a workspace with a main package.

Upvotes: 10

Related Questions