ローカルの未公開のクレートを使用する方法は?


102

ライブラリを作成しました:

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)を使用している場合です。

回答:


135

依存関係セクションを実行可能ファイルのCargo.tomlに追加し、パスを指定します。

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

または同等の代替TOML:

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

ローカルパスの代わりにgitリポジトリを使用する方法などの詳細については、依存関係の指定に関するCargoドキュメントを確認してください。


8
Cargo.tomlがcrates.ioを参照している間に他の人も私のコードをビルドできるようにしながら、自分で(開発用に)ローカルクレートを使用する方法はありますか?
デビッドラウンディ2017年

1
現在のところ、デフォルトでは不可能です。ただし、ローカルブランチで作業し、Cargo.tomlをローカルの依存関係の参照(または混合参照)で置き換え、マージする前または途中で、メインのCargo.tomlファイルに戻すか保持することができます。
Paul-Sebastian Manole

7
@DavidRoundyあなたがまだ答えを探しているなら、今あなたが求めていることをすることが可能です。versionpath依存関係の両方を指定することができ、それpathを公​​開するときに一部が削除されます:)
Connie Hilarides

詳細なドキュメントが利用可能であるdoc.rust-lang.org/cargo/reference/...
デヴィッド・J.

1
それは同じですが、とに行うことは可能であるgitのではなくversionmy_lib = { path = "...", git = "..." }開発中にローカルコピーを使用して、誰かがリポジトリを複製してプログラムをコンパイルしようとしたときにリモートgitを使用できるように、このようなものはありますか?
Ruben Kostandyan

0

に相当するものを探していましたmvn install。この質問は私の元の質問とまったく同じではありませんが、私の元の質問に出くわして、ここのリンクをたどる人なら誰でもより完全な答えを見つけるでしょう。

答えは、「mvn installCargo.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宣言を逃した可能性があります(通常はクレートのルートに配置されます)。

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

今では動作します。


2
そして今、この答えは小さな記事です:purplefrog.com/~thoth/rust-external-libraries
Mutant Bob
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.