Unixソケットを介して接続するdaemon
とclient
を含むプロジェクトを作成したいと思います。
client
とdaemon
には2つのバイナリが必要です。2つの異なるソースから2つのターゲットをビルドするようにCargo
に指示するにはどうすればよいですか?
少し幻想を加えるために、library
の主要部分にdaemon
を持ち、それをラップしてソケットを介して通信するためのバイナリを持ちたいです。
したがって、この種のツリーアーキテクチャがあります。
├── Cargo.toml
├── target
| └── debug
| ├── daemon
│ └── client
└── src
├── daemon
│ ├── bin
│ │ └── main.rs
│ └── lib
│ └── lib.rs
└── client
└── bin
└── main.rs
両方の懸念を管理する1つの実行可能ファイルを作成することもできますが、それが非常に優れた実践でない限り、それは私がやりたいことではありません。
前述のように、[[bin]]
を使用して複数のバイナリを指定できます here :
[[bin]]
name = "daemon"
path = "src/daemon/bin/main.rs"
[[bin]]
name = "client"
path = "src/client/bin/main.rs"
ヒント:これらのファイルをsrc/bin/daemon.rs
およびsrc/bin/client.rs
に配置すると、Cargoがsrc/bin
のすべてのファイルをコンパイルするため、daemon
およびclient
という名前の2つの実行可能ファイルを取得できます。同じ名前の実行可能ファイルに自動的に。この規則に従わない場合にのみ、上記のスニペットのように名前とパスを指定する必要があります。
別の方法は、前述のワークスペース機能を使用することです here 。これにより、複数のライブラリを使用できるため、柔軟性が向上します。プロジェクト構造の例:
.
├── Cargo.toml
├── cli
│ ├── Cargo.toml
│ └── src
│ └── main.rs
├── core
│ ├── Cargo.toml
│ └── src
│ └── lib.rs
├── daemon
│ ├── Cargo.toml
│ └── src
│ └── main.rs
├── gui
│ ├── Cargo.toml
│ └── src
│ └── main.rs
└── rpc
├── Cargo.toml
└── src
└── lib.rs
ルートの内容Cargo.toml
:
[workspace]
members = ["cli", "core", "daemon", "gui", "rpc"]