J'ai fait une bibliothèque:
cargo new my_lib
et je veux utiliser cette bibliothèque dans un autre programme:
cargo new my_program --bin
extern crate my_lib;
fn main {
println!("Hello, World!");
}
que dois-je faire pour que cela fonctionne?
Ils ne se trouvent pas dans le même dossier de projet.
.
├── my_lib
└── my_program
J'espère que cela a du sens.
Je pensais que je serais en mesure de remplacer le chemin selon le Cargo guide , mais il indique
Vous ne pouvez pas utiliser cette fonction pour indiquer à Cargo comment trouver des caisses locales non publiées.
C'est lorsque vous utilisez la dernière version stable de Rust (1.3).
Ajoutez une section de dépendance au Cargo.toml de votre exécutable et spécifiez le chemin:
[dependencies.my_lib]
path = "../my_lib"
ou le TOML alternatif équivalent:
[dependencies]
my_lib = { path = "../my_lib" }
Consultez le Cargo docs pour spécifier les dépendances pour plus de détails, comme comment utiliser un référentiel git au lieu d'un chemin local.
Je cherchais un équivalent à mvn install
. Bien que cette question ne soit pas tout à fait un double de ma question d'origine, quiconque tombe sur ma question d'origine et suit le lien ici trouvera une réponse plus complète.
La réponse est "il n'y a pas d'équivalent à mvn install
parce que vous devez coder en dur le chemin dans le fichier Cargo.toml qui sera probablement erroné sur l'ordinateur de quelqu'un d'autre, mais vous pouvez vous en rapprocher. "
La réponse actuelle est un peu brève et j'ai dû fouiller un peu plus longtemps pour que les choses fonctionnent, alors voici plus de détails:
/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
inclut ce paragraphe qui fait écho à la réponse de Shepmaster:
Ou, si vous avez essayé d'utiliser un module à partir d'une caisse externe, vous avez peut-être manqué le
extern crate
déclaration (qui est généralement placée dans la racine de la caisse):extern crate core; // Required to use the `core` crate use core::any;
Passage de use
à extern crate
m'a donné ceci:
/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);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
J'ai dû gifler un pub
sur le devant de cette fonction
pub fn svg_header(w: i32, h: i32) -> String
Maintenant ça marche.