web-dev-qa-db-ja.com

マニフェストの解析に失敗しました-ターゲットが指定されていません

私はRustに不慣れで、Cargoを使用してテストプロジェクトを構築しようとしています。私のCargo.tomlは次のようになります。

[package]
name = "Rust-play"
version = "0.0.1"
authors = [ "Bradley Wogsland <omitted>" ]

(しかし、実際のTOMLファイルは私のメールを省略しません)。 cargo buildを実行すると、次のエラーが発生します。

エラー:/Users/wogsland/Projects/Rust-play/Cargo.tomlでマニフェストを解析できませんでした

原因:src/lib.rs、src/main.rs、[lib]セクション、または[[bin]]セクションのいずれかがマニフェストで指定されていてはなりません。

私のmain関数はsrc/test.rsファイルにあります。 TOMLファイルで指定する必要がありますか?もしそうなら、どのように?追加してみた

target = "src/test.rs"

無駄に。

23
wogsland

エラーが言うように:

src/lib.rssrc/main.rs[lib]セクション、または[[bin]]セクションのいずれかが存在する必要があります

したがって、直接的な答えは [[bin]]セクションを追加 です。

[[bin]]
name = "test"
path = "src/test.rs"

ただし、予想される場所src/main.rsにファイルを配置するのがはるかに一般的です。複数のバイナリを使用する場合は、src/bin/test.rsに配置することもできます。

実際にコードをテストするためのものである場合、単体テストはテストするコードと同じファイルに入れられ、統合テストはtests/foo.rsに入れられます。

30
Shepmaster

まとめとして:

cargo new xxx --binを使用すると、srcディレクトリにあるファイルはmain.rsという名前になります。そして、ファイルCargo.tomlを確認すると、あなたが書いたのと同じです。したがって、最初の方法はsrcのファイルをmain.rsに変更することです

貨物レポートとして、[[bin]]を使用してファイルを設定できます。 @Shepmasterが解決しました。

どちらの方法でも機能します。

1
Jesse Chen

別の問題と解決策:Cargo.tomlファイルをにコピーした場合にも、このエラーが発生する可能性がありますクレートの親フォルダ

1
DenisKolodin

私の場合、そしておそらくあなたのケースでも、rsファイルはmain.rsという名前ではありませんでしたが、Cargoはsrc/main.rsがバイナリクレートのクレートルートであると想定しています。したがって、ルールは、プロジェクトが実行可能ファイルの場合、メインソースファイルにsrc/main.rsという名前を付けることです。ライブラリの場合は、メインのソースファイルにsrc/lib.rsという名前を付けます。

さらに、Cargoはsrc/bin/*.rsにあるファイルも、前の回答で述べたように実行可能ファイルとして扱います。

0
Wahib Ul Haq