如何使用本地未发布的箱子?
How to use a local unpublished crate?
我做了一个图书馆:
cargo new my_lib
并且我想在不同的程序中使用该库:
cargo new my_program --bin
extern crate my_lib;
fn main {
println!("Hello, World!");
}
我需要做什么才能让它工作?
它们不在同一个项目文件夹中。
.
├── my_lib
└── my_program
希望这是有道理的。
我以为我可以根据 Cargo guide 覆盖路径,但它指出
You cannot use this feature to tell Cargo how to find local unpublished crates.
这是在使用最新的稳定版 Rust (1.3) 时。
将依赖部分添加到可执行文件的 Cargo.toml 并指定路径:
[dependencies.my_lib]
path = "../my_lib"
或等效的替代 TOML:
[dependencies]
my_lib = { path = "../my_lib" }
查看 Cargo docs for specifying dependencies 了解更多详细信息,例如如何使用 git 存储库而不是本地路径。
我一直在寻找 mvn install
的等价物。虽然这个问题与我的原始问题并不完全相同,但任何偶然发现我的原始问题并遵循 link 此处的人都会找到更完整的答案。
答案是"there is no equivalent to mvn install
because you have to hard-code the path in the Cargo.toml file which will probably be wrong on someone else's computer, but you can get pretty close."
现有的答案有点简短,我不得不花更长的时间才能真正让事情发挥作用,所以这里有更多细节:
/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 的回答相呼应的这一段:
Or, if you tried to use a module from an external crate, you may have missed
the extern crate
declaration (which is usually placed in the crate root):
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
现在可以了。
我做了一个图书馆:
cargo new my_lib
并且我想在不同的程序中使用该库:
cargo new my_program --bin
extern crate my_lib;
fn main {
println!("Hello, World!");
}
我需要做什么才能让它工作?
它们不在同一个项目文件夹中。
.
├── my_lib
└── my_program
希望这是有道理的。
我以为我可以根据 Cargo guide 覆盖路径,但它指出
You cannot use this feature to tell Cargo how to find local unpublished crates.
这是在使用最新的稳定版 Rust (1.3) 时。
将依赖部分添加到可执行文件的 Cargo.toml 并指定路径:
[dependencies.my_lib]
path = "../my_lib"
或等效的替代 TOML:
[dependencies]
my_lib = { path = "../my_lib" }
查看 Cargo docs for specifying dependencies 了解更多详细信息,例如如何使用 git 存储库而不是本地路径。
我一直在寻找 mvn install
的等价物。虽然这个问题与我的原始问题并不完全相同,但任何偶然发现我的原始问题并遵循 link 此处的人都会找到更完整的答案。
答案是"there is no equivalent to mvn install
because you have to hard-code the path in the Cargo.toml file which will probably be wrong on someone else's computer, but you can get pretty close."
现有的答案有点简短,我不得不花更长的时间才能真正让事情发挥作用,所以这里有更多细节:
/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 的回答相呼应的这一段:
Or, if you tried to use a module from an external crate, you may have missed the
extern crate
declaration (which is usually placed in the crate root):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
现在可以了。