📚
main.rsとlib.rsは同居できる
main.rs
とlib.rs
は同居できる
タイトル通り、同一パッケージ内にsrc/main.rs
とsrc/lib.rs
の両方を入れることができます。
排他ではありません。
例えば、以下のようにsrc/a.rs
、src/lib.rs
、Cargo.toml
を用意するとします。
src/a.rs
pub fn f() {
println!("a!");
}
src/lib.rs
pub mod a;
Cargo.toml
[package]
name = "app"
# 以下略
この場合、src/main.rs
でどう使えるようになるかというと
src/main.rs
fn main() {
app::a::f();
}
こんな感じになります。
src/lib.rs
にモジュール宣言をまとめてsrc/main.rs
をすっきりさせたり、ライブラリとバイナリの両クレートを共存させたりすることができます。
同じモジュールを`lib.rs`と`main.rs`の両方で宣言した場合
src/lib.rs
とsrc/main.rs
に同じモジュールを宣言することはできます。
上記の例を用いると、
src/main.rs
mod a;
fn main() {
app::a::f();
a::f();
}
といった感じになります。
できることはできますが、何か使い道があるのかといわれると全然思いつかない・・・。
ちなみにthe bookでは
The Rust Programming Languageの7.1に書いてあり、引用すると
If a package contains src/main.rs and src/lib.rs, it has two crates: a binary and a library, both with the same name as the package.
とあるように、バイナリクレートとライブラリクレートが同じ名前でパッケージとして含まれる状態になります。
Discussion