2016-05-27 71 views
9

私は錆に慣れていて、Cargoでテストプロジェクトを構築しようとしています。マニフェストの解析に失敗しました - ターゲットが指定されていません

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

(実際TOMLファイルには、私の電子メールは省略されません):私のCargo.tomlは次のようになります。私はcargo build私は、次のエラーを取得していた場合:

error: failed to parse manifest at /Users/wogsland/Projects/rust-play/Cargo.toml

Caused by: no targets specified in the manifest either src/lib.rs, src/main.rs, a [lib] section, or [[bin]] section must be present

main機能はsrc/test.rsファイルです。それをTOMLファイルで指定する必要がありますか?もしそうなら、どうですか?私は追加しようとしました

target = "src/test.rs" 

無駄です。

答えて

15

エラーが言うように:

either src/lib.rs , src/main.rs , a [lib] section, or [[bin]] section must be present

だから、直接の答えはadd a [[bin]] sectionにある:src/main.rs

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

しかし、それだけで期待される場所にファイルを配置するためにはるかに普通です。複数のバイナリを作成する予定がある場合は、src/bin/test.rsに配置することもできます。

実際にコードをテストする場合、単体テストはテストするコードと同じファイルにあり、統合テストはtests/foo.rsになります。

+0

ありがとう、これは非常に役に立ちました! – wogsland

-1

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

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

+0

もう少し拡張して、他の回答とは違って、この回答について異なる点を強調することはできますか?もう1つの答えはすでに "期待された場所にファイルを置く:src/main.rs'" – Shepmaster

+0

@Shepmaster尋ねてくれてありがとう。私の答えでは、他の誰かが他の名前を使っていても、 'srs'という場所にファイルを持っていれば、ファイルの名前を' main.rs'に明示的にハイライト表示しようとしました。あなたの答えでは、 'main.rs'ファイルでなければならず、他の名前でなければならないと明確に言及されていないものです。また、図書館について言わせてもらった。 否決を取り消すようにリクエストできますか? :) –

1

まとめると:

あなたがcargo new xxx --binを使用する場合は、srcディレクトリ内のファイルがmain.rsという名前でわかります。そして、あなたがファイルCargo.tomlをチェックするとき。あなたが書いたのと同じです。 srcのファイルをmain.rsに変更することです。

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

2つの方法の両方が機能します。

+0

この回答が既存の回答と比較してどのような新しい情報を提供するか説明できますか? – Shepmaster

+0

あなたの答えは2つの方法の両方を説明していることがわかりました。@ Shepmaster、実際には私は錆びていないし、同じ問題に遭遇しました。 –

関連する問題