Подтвердить что ты не робот

Как использовать локальный неопубликованный ящик?

Я создал библиотеку:

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

4b9b3361

Ответ 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, который, вероятно, будет неправильным на чужом компьютере, но вы можете подойти довольно близко".