如何使用本地未发表的板条箱?

我建了个图书馆:

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)的最新稳定版本时。

59841 次浏览

向可执行文件的 货物,汤姆添加依赖项部分并指定路径:

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

或者类似的替代 TOML:

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

查看 用于指定依赖项的货物文档了解更多细节,比如如何使用 git 存储库而不是本地路径。

我在找一个相当于 mvn install的东西。虽然这个问题并不完全是我原来的问题的副本,但是任何偶然发现我原来的问题并且点击这里链接的人都会找到一个更完整的答案。

答案是“没有相当于 mvn install的代码,因为您必须硬编码 Cargo.toml 文件中的路径,这在其他人的计算机上可能是错误的,但是您可以非常接近。”

现有的答案有点简短,我不得不花费更长的时间才能真正让事情运转起来,所以这里有更多的细节:

/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中的这一段回应了谢普马斯特的回答:

或者,如果您试图使用一个外部板条箱模块,您可能会错过 extern crate声明(通常放在 crate 根目录中) :

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

我不得不在函数前面贴一个 pub

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

现在成功了。