грузовой прогон: не удается найти ящик, хотя он указан в Cargo.toml

#rust #rust-cargo

#Ржавчина #rust-cargo

Вопрос:

Я использую скрипт Rust, вызываемый build.rs для генерации кода (это не сценарий сборки Cargo). Скрипт содержит это вверху:

 extern crate reqwest;
  

Это мой Cargo.toml файл:

 [package]
name = "my-script"
version = "0.1.0"
edition = "2018"

[[bin]]
path = "build.rs"
name = "builder"

[dependencies]
reqwest = { version = "0.10", features = ["blocking", "json"] }
  

Когда я это делаю cargo run , это выдает мне эту ошибку:

 error[E0463]: can't find crate for `reqwest`
 --> build.rs:1:1
  |
1 | extern crate reqwest;
  | ^^^^^^^^^^^^^^^^^^^^^ can't find crate
  

Как мне сделать так, чтобы он мог найти reqwest ящик?

Ответ №1:

build.rs это имя по умолчанию для сценария сборки Cargo, который запускается во время сборки для генерации кода, ссылки в библиотеках C и т. Д.

Поскольку cargo видит, что у вас есть a build.rs в каталоге вашего проекта, он принимает его за сценарий сборки и пытается его собрать. Однако скрипты сборки не используют обычные зависимости, а вместо этого используют зависимости из [build-dependencies] раздела Cargo.toml . Поскольку у вас его нет, reqwest ящик недоступен для сценария сборки.

Переименование файла — очевидное решение. Однако соглашение заключается в том, чтобы помещать исполняемые bin/ файлы в каталог вашего проекта (cargo даже автоматически найдет там файлы для вас).

Ответ №2:

build.rs Скрипту нужно другое имя. Переименовать build.rs в builder.rs и обновить Cargo.toml :

 path = "builder.rs"
  

Вы также можете удалить extern crate reqwest оператор, поскольку он выводится с помощью Cargo .