157

我做了一个图书馆:

cargo new my_lib

我想在不同的程序中使用该库:

cargo new my_program --bin
extern crate my_lib;

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

我需要做什么才能让它工作?

它们不在同一个项目文件夹中。

.
├── my_lib
└── my_program

希望这是有道理的。

我以为我可以按照Cargo guide覆盖路径,但它指出

您不能使用此功能告诉 Cargo 如何查找本地未发布的 crate。

这是使用最新稳定版 Rust (1.3) 时的情况。

4

2 回答 2

213

将依赖部分添加到可执行文件的Cargo.toml并指定路径:

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

或等效的替代 TOML:

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

查看Cargo 文档以了解更多详细信息,例如如何使用 git 存储库而不是本地路径。

于 2015-10-08T21:08:07.260 回答
0

我正在寻找与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包括这一段与 Shepmaster 的回答相呼应:

或者,如果您尝试使用来自外部 crate 的模块,您可能错过了extern crate声明(通常放在 crate 根目录中):

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

use core::any;

切换useextern 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

现在它起作用了。

于 2019-06-05T19:23:28.383 回答