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.