#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 .