私はRustを学んでおり、単純なクライアント/サーバプログラムを書くことに決めました。クライアントとサーバーの両方は、すでに書いた非常に単純なモジュールを使用しています。このコードが成長するかもしれないことを知って、わかりやすく私のソースをコンパートメント化することに決めました。次のように今の私の現在の階層は見えます:main.rs
は、プロジェクトのルートディレクトリにあるときに、私はスタックオーバーフローやネットで見つけ複数のルート以外のバイナリから非ルートモジュールをインポート
├── Cargo.lock
├── Cargo.toml
├── README.md
├── src
│ ├── client
│ │ └── main.rs
│ ├── common
│ │ ├── communicate.rs
│ │ └── mod.rs
│ ├── lib.rs
│ └── server
│ └── main.rs
Manyofthe例がために偉大なサンプルを提供します。残念ながら私は上記のように違うことをしようとしています。
communicate.rs
には、私が書いたすべてのネットワークコードが含まれています。最終的に他のRustファイルを追加し、public mod
の文をmod.rs
に含めます。現在、common/mod.rs
私が持っているすべての pub mod communicate;
だけclient
フォルダに焦点を当てている示したように、私が持っているすべてはmain.rs
です。ファイル「ヘッダ」私はCargo.toml
に持っているすべては、私はクライアントのバイナリをビルドしようとすると、コンパイラはcommon
クレートができなかったと文句を言い
[[bin]]
name = "server"
path = "src/server/main.rs"
[[bin]]
name = "client"
path = "src/client/main.rs"
で、基本的な[package]
セクションのほかに
extern crate common;
use std::thread;
use std::time;
use std::net;
use std::mem;
use common::communicate;
pub fn main() {
// ...
}
を示しています見つけられた。
$ cargo build
Compiling clientserver v0.1.0 (file:///home/soplu/rust/RustClientServer)
client/main.rs:1:1: 1:21 error: can't find crate for `common` [E0463]
client/main.rs:1 extern crate common;
^~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
error: Could not compile `clientserver`.
To learn more, run the command again with --verbose.
私はそれがclient/
フォルダ内の共通クレートを探しているので、これはあると思います。 extern crate
ステートメントの代わりにmod
ステートメントを試したとき、私は同じ問題を抱えていました。
use std::thread;
use std::time;
use std::net;
use std::mem;
mod common;
は私を与えた:
client/main.rs:6:5: 6:11 error: file not found for module `common`
client/main.rs:6 mod common;
^~~~~~
client/main.rs:6:5: 12:11 help: name the file either common.rs or common/mod.rs inside the directory "client"
を私もその内容pub mod common;
ですが、私はまだ最初のと同じエラーを取得しclient
でlib.rs
を追加(extern crate...
を使用して)みました。
私はそれがthis projectのようにモデル化されている可能性がありますが、これはすべてのフォルダにCargo.toml
が必要であることを私は避けたいと考えています。
私は近くにいるように感じますが、何か不足しています。
パーフェクト、これは私の問題を解決しました。あなたの最初の声明は、実際に私が作り出そうとしていたものをクリアするのに多くの助けとなりました。ありがとうございました。同じ方法で複数のライブラリを宣言できますか? '[lib]' 'name =" otherlib "' 'path =" src/otherlib/lib.rs "' – soplu
Cargoはパッケージごとに1つのライブラリしかサポートしていません。 Cargo.tomlのローカルパッケージは[パスの依存関係](http://doc.crates.io/specifying-dependencies.html#specifying-path-dependencies)で参照できます。 –