Как использовать местный неопубликованный ящик?
Я сделал библиотеку:
cargo new my_lib
и я хочу использовать эту библиотеку в другой программе:
cargo new my_program --bin
extern crate my_lib;
fn main {
println!("Hello, World!");
}
Что мне нужно сделать, чтобы заставить это работать?
Они не находятся в одной папке проекта.
.
├── my_lib
└── my_program
Надеюсь, это имеет смысл.
Я думал, что смогу переопределить путь в соответствии с руководством по грузам, но в нем говорится
Вы не можете использовать эту функцию, чтобы сообщить Cargo, как найти локальные неопубликованные ящики.
Это при использовании последней стабильной версии Rust (1.3).
1 ответ
Добавьте раздел зависимостей в Cargo.toml вашего исполняемого файла и укажите путь:
[dependencies.my_lib]
path = "../my_lib"
или эквивалентный альтернативный TOML:
[dependencies]
my_lib = { path = "../my_lib" }
Посмотрите документы Cargo для уточнения деталей, например, как использовать git-репозиторий вместо локального пути.
Я искал эквивалент mvn install
. Хотя этот вопрос не является точной копией моего исходного вопроса, любой, кто наткнется на мой исходный вопрос и перейдет по ссылке здесь, найдет более полный ответ.
Ответ: "нет эквивалента mvn install
потому что вам нужно жестко запрограммировать путь в файле Cargo.toml, который, вероятно, будет неправильным на чужом компьютере, но вы можете подойти довольно близко ".
Существующий ответ немного краток, и мне пришлось немного покопаться, чтобы все заработало, поэтому вот более подробная информация:
/usr/bin/cargo run --color=always --package re5 --bin re5
Compiling re5 v0.1.0 (file:///home/thoth/art/2019/radial-embroidery/re5)
error[E0432]: unresolved import `embroidery_stitcher`
--> re5/src/main.rs:5:5
|
5 | use embroidery_stitcher;
| ^^^^^^^^^^^^^^^^^^^ no `embroidery_stitcher` in the root
rustc --explain E0432
включает этот абзац, который повторяет ответ Шепмастера:
Или, если вы пытались использовать модуль из внешнего ящика, возможно, вы пропустили
extern crate
объявление (которое обычно помещается в корень ящика):extern crate core; // Required to use the `core` crate use core::any;
Переключение с use
к extern crate
получил мне это:
/usr/bin/cargo run --color=always --package re5 --bin re5
Compiling embroidery_stitcher v0.1.0 (file:///home/thoth/art/2019/radial-embroidery/embroidery_stitcher)
warning: function is never used: `svg_header`
--> embroidery_stitcher/src/lib.rs:2:1
|
2 | fn svg_header(w: i32, h: i32) -> String
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[warn(dead_code)] on by default
Compiling re5 v0.1.0 (file:///home/thoth/art/2019/radial-embroidery/re5)
error[E0603]: function `svg_header` is private
--> re5/src/main.rs:8:19
|
8 | let mut svg = embroidery_stitcher::svg_header(100,100);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Мне пришлось ударить pub
в передней части этой функции
pub fn svg_header(w: i32, h: i32) -> String
Теперь это работает.