Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Could not find `Cargo.toml` when building a dependent crate from GitHub

I'm trying to use the rust-mosquitto library. My current Cargo.toml is:

[package]
name = "HomeDaemon"
version = "0.1.0"
authors = ["RTR <[email protected]>"]

[dependencies.mosquitto]
git = "https://github.com/kteza1/rust-mosquitto"

When I run cargo build, following error is reported:

Could not find `Cargo.toml` in `/Users/ravitejareddy/.cargo/git/checkouts/rust-mosquitto-8203e77dcf072bf7/rust-mosquitto`

The actual download in ~/.cargo/git/checkouts/rust-mosquitto-8203e77dcf072bf7/master shows that Cargo.toml is present.

There is an extra rust-mosquitto in the path above, is that a problem?

like image 782
tez Avatar asked Jul 22 '15 18:07

tez


People also ask

Where is my cargo toml file?

Cargo. toml and Cargo. lock are stored in the root of your project (package root). Source code goes in the src directory.

What is a cargo toml file?

Cargo. toml is the manifest file for Rust's package manager, cargo . This file contains metadata such as name, version, and dependencies for packages, which are call "crates" in Rust.

What is cargo NEW -- bin?

cargo new accepts two flags: --lib, for creating libraries, and --bin, for creating binaries, or executables.


2 Answers

This does not specifically answer the question that @tez asked, but I encountered the same error with a slightly different root culprit. I was writing some simple code in vim, so I created a simple main.rs file. When I cargo run it, it was spitting out the same error:

error: could not find Cargo.toml in /Users/yvonmanzi/Documents/Rust or any parent directory

The surprising thing, without the hindsight, of course, was that rustc main.rs was creating a binary executable as expected while cargo run wasn't. It turns out I had created all my rust packages(aka projects) up to that point using cargo new project-name --bin as shown here, thus by default including Cargo.lock, Cargo.toml, and src folder. Hopefully, it is clear by now that mine was just a simple rookie mistake; I simply, quite literally, didn't have Cargo.toml in my project folder. So, dear fellow rooky league Rustacean, if you get the same error, create your project with cargo new project-name --bin command.

like image 101
Yvon Manzi Avatar answered Nov 15 '22 11:11

Yvon Manzi


The problem comes from your Cargo.toml in examples/ticktock:

[dependencies.mosquitto]
version = "*"
path = "../../../rust-mosquitto" 

When downloading your project from git, all the subdirectories are scanned for more Cargo.toml files. If you run RUST_LOG=trace cargo build -v, you see what's happening:

TRACE:cargo::ops::cargo_read_manifest: looking for root package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master, source_id=https://github.com/kteza1/rust-mosquitto#7e08a291
TRACE:cargo::ops::cargo_read_manifest: looking for child package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master
TRACE:cargo::ops::cargo_read_manifest: read_package; path=/Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/Cargo.toml; source-id=https://github.com/kteza1/rust-mosquitto#7e08a291
TRACE:cargo::ops::cargo_read_manifest: looking for child package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/.git
TRACE:cargo::ops::cargo_read_manifest: not processing /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/.git
TRACE:cargo::ops::cargo_read_manifest: looking for child package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/examples
TRACE:cargo::ops::cargo_read_manifest: looking for child package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/examples/c-mosquitto
TRACE:cargo::ops::cargo_read_manifest: looking for child package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/examples/ticktock
TRACE:cargo::ops::cargo_read_manifest: read_package; path=/Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/examples/ticktock/Cargo.toml; source-id=https://github.com/kteza1/rust-mosquitto#7e08a291
DEBUG:cargo: handle_error; err=CliError { error: ChainedError { error: Unable to update https://github.com/kteza1/rust-mosquitto, cause: Could not find `Cargo.toml` in `/Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/rust-mosquitto` }, unknown: false, exit_code: 101 }

Cargo then tries to ensure that the nested Cargo.toml can have all of the dependencies satisfied.

like image 41
Shepmaster Avatar answered Nov 15 '22 11:11

Shepmaster