ライブラリを作成しました:
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)の最新の安定バージョンを使用している場合です。
実行可能ファイルのCargo.tomlに依存関係セクションを追加し、パスを指定します。
[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
には、Shepmasterの答えを反映した次の段落が含まれています。
または、外部クレートからモジュールを使用しようとした場合、
extern 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
今では動作します。