Rustで複数の実行バイナリを作成する

通常、Cargoを使うと、srcにあるmain.rsがバイナリ、lib.rsがライブラリの、それぞれ唯一のコードの起点となる。

.
├── Cargo.lock
├── Cargo.toml
├── benches
│   └── large-input.rs
├── examples
│   └── simple.rs
├── src
│   ├── bin
│   │   └── another_executable.rs
│   ├── lib.rs
│   ├── main.rs
│   └── some_nice_modules.rs
└── tests
    └── some-integration-tests.rs

1つのプロジェクトで複数の実行バイナリを作成したい場合は、2通りの方法があるようだ。

src/bin

上図の通り、src/binに任意のRustコード(another_executable.rs)を置くと、main.rsに加えてそれをコード起点とした実行バイナリも、ファイルと同名で作成される。

Cargo.toml

Cargo.tomlに以下のように[[bin]]セクションを作ると、それを起点とした実行バイナリも、nameに指定した名前で作成される。

Cargo.toml
[[bin]]
name = "another_executable"
path = "src/another_executable.rs"

部分的にコードを共有したい

複数の実行バイナリでコードを共有するにあたり、どこかに共有コードを置きたい。

しかし、例えば上図src/bin/another_executable.rsから、some_nice_modules.rsは、直接見に行くことはできない。

この時、lib.rssome_nice_modules.rsを公開しておき、another_executable.rsでは全体のプロジェクト名を使ってインポートすると、使えるようだ。

pub mod some_nice_modules;

pub fn hello_world() {
    println!("Hello, world!");
}

[package]
name = "hogehoge"  # ←ここで全体のプロジェクト名が指定されている
authors = [...略]

extern crate hogehoge;

use hogehoge::some_nice_modules::{hello_world};

hello_world();

この時、インポートして使うcrateは起点となるファイルで宣言されてなければならないので、some_nice_modules.rsで使うものはlib.rsの方で宣言されていなければならない。

本WebサイトはcookieをPHPのセッション識別および左欄目次の開閉状況記憶のために使用しています。同意できる方のみご覧ください。More information about cookies
programming/rust/directory_structure.txt · 最終更新: 2019/08/08 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0