rust multifile rust-crates

rust - ¿Cómo usar una caja local no publicada?



multifile rust-crates (2)

Agregue una sección de dependencia al Cargo.toml de su ejecutable y especifique la ruta:

[dependencies.my_lib] path = "../my_lib"

o el TOML alternativo equivalente:

[dependencies] my_lib = { path = "../my_lib" }

Consulte los documentos de Cargo para especificar dependencias para obtener más detalles, como cómo usar un repositorio git en lugar de una ruta local.

Hice una biblioteca:

cargo new my_lib

y quiero usar esa biblioteca en un programa diferente:

cargo new my_program --bin

extern crate my_lib; fn main { println!("Hello, World!"); }

¿Qué necesito hacer para que esto funcione?

No están en la misma carpeta del proyecto.

. ├── my_lib └── my_program

Esperemos que esto tenga sentido.

Pensé que podría anular el camino según la guía de Cargo , pero dice

No puede usar esta función para decirle a Cargo cómo encontrar cajas locales no publicadas.

Esto es cuando se usa la última versión estable de Rust (1.3).


Estaba buscando un equivalente a mvn install . Si bien esta pregunta no es un duplicado de mi pregunta original, cualquiera que se encuentre con mi pregunta original y siga el enlace aquí encontrará una respuesta más completa.

La respuesta es "no hay equivalente a mvn install porque tienes que codificar la ruta en el archivo Cargo.toml que probablemente estará mal en la computadora de otra persona, pero puedes acercarte bastante".

La respuesta existente es un poco breve y tuve que moverme un poco más para que las cosas funcionen, así que aquí hay más detalles:

/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 incluye este párrafo que refleja la respuesta de Shepmaster:

O, si trató de usar un módulo de una caja externa, es posible que se haya perdido la declaración de extern crate (que generalmente se coloca en la raíz de la caja):

extern crate core; // Required to use the `core` crate use core::any;

Cambiar de use a extern crate me consiguió esto:

/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); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Tuve que golpear un pub en la parte delantera de esa función

pub fn svg_header(w: i32, h: i32) -> String

Ahora funciona.