Githubなどに上げていないローカルのクレートを使う方法。
簡単なんだけどちょっとハマったのでメモ。
ライブラリ側
まず自分のライブラリを作る
$ cargo new my_lib
mylib/src/lib.rs
pub fn hello() {
println!("Hello my library");
}
// ここから下はcargo new したときに生成されるコード
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
}
}
ここで、#[cfg(test)]は条件付きコンパイル属性です。
この場合はcargo testしたときのみコンパイルされる?(ちがうかも)
なぜか#[cfg(test)]の直下に自分がエクスポートしたい関数を書いちゃってそんな関数ないよってコンパイルエラーでてハマった。
そりゃそうだ!!
使う側
$ cargo new my_app --bin
実行形式ファイルを作るときは--bin
オプションを忘れずに。
my_app/Cargo.toml
[package]
name = "my_app"
version = "0.1.0"
authors = ["Ayachi Gin <ayachigin@gmail.com>"]
[dependencies.my_lib]
path = "../my_lib"
さっき作ったライブラリのパスを依存関係に書く
my_app/src/main.rs
extern crate my_lib;
fn main() {
println!("Hello, world!");
my_lib::hello();
}
これで実行するだけ。
簡単ですね。
$ cargo run
cargo run
Compiling my_lib v0.1.0 (ほにゃらら/projects/rust/my_lib)
Compiling my_app v0.1.0 (ほにゃらら/projects/rust/my_app)
Running `ほにゃらら\projects\rust\my_app\target\debug\my_app.exe`
Hello, world!
Hello my library