Как использовать локальный неопубликованный ящик?
Я создал библиотеку:
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-репозиторий вместо локального пути.
Ответ 2
Я сам наткнулся на эту проблему совсем недавно, но существующий ответ был немного кратким, и мне пришлось немного подождать, чтобы на самом деле все заработало
/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
error: aborting due to previous error
For more information about this error, try 'rustc --explain E0432'.
error: Could not compile 're5'.
rustc --explain E0432
включает этот абзац, повторяющий ответ Шепмастера:
Or, if you tried to use a module from an external crate, you may have missed
the 'extern crate' declaration (which is usually placed in the crate root):
'''
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);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
For more information about this error, try 'rustc --explain E0603'.
error: Could not compile 're5'.
так что мне пришлось шлепнуть pub
на передней части этого Fuction
pub fn svg_header(w: i32, h: i32) -> String
Теперь это работает.
Поэтому, хотя этот вопрос не совсем дублирует мой первоначальный вопрос, любой, кто наткнется на мой первоначальный вопрос и перейдет по ссылке здесь, найдет более полный ответ.
И до сих пор ответ таков: "нет эквивалента mvn install
потому что вам нужно жестко прописать путь в файле .toml, который, вероятно, будет неправильным на чужом компьютере, но вы можете подойти довольно близко".