2016-05-27 34 views
9

Sono nuovo a Rust e sto tentando di creare un progetto di prova con Cargo. Il mio Cargo.toml assomiglia:non è stato in grado di analizzare manifest: nessun target specificato

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

(ma il file TOML effettivo non omette la mia e-mail). Quando mi cargo build Sto ottenendo il seguente errore:

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

mia funzione main è in un file src/test.rs. Devo specificarlo nel file TOML? Se é cosi, come? Ho provato ad aggiungere

target = "src/test.rs" 

inutilmente.

risposta

15

Come dice l'errore:

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

Quindi la risposta diretta è quello di add a [[bin]] section:

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

Tuttavia, è molto di più del solito per sufficiente posizionare il file nella posizione prevista: src/main.rs. Puoi anche inserirlo in src/bin/test.rs se prevedi di avere più file binari.

Se in realtà è per testare il codice, i test di unità vanno nello stesso file del codice che stanno testando e i test di integrazione vanno in tests/foo.rs.

+0

Grazie, è stato molto utile! – wogsland

-1

Nel mio caso e probabilmente anche nel tuo caso, il file rs non è stato chiamato main.rs mentre Cargo presuppone che src/main.rs sia la radice di cassa di una cassa binaria. Pertanto, la regola è che se il progetto è un eseguibile, denominare il file di origine principale src/main.rs. Se si tratta di una libreria, denominare il file di origine principale src/lib.rs.

Inoltre, Cargo tratterà anche i file che si trovano in src/bin/*.rs come eseguibili come menzionato nella risposta precedente.

+0

Puoi ampliare un po 'di più per evidenziare cosa c'è di diverso in questa risposta rispetto all'altra risposta? L'altra risposta dice già "posiziona il file nella posizione prevista:' src/main.rs' " – Shepmaster

+0

@Shepmaster Grazie per avermelo chiesto. Nella mia risposta, ho cercato di evidenziare esplicitamente la "rinomina" del file in "main.rs" se qualcuno sta usando un altro nome ma lo ha ancora in posizione: 'srs'. Qualcosa che non è stato chiaramente menzionato nella tua risposta che deve essere il file 'main.rs' e nessun altro nome. Inoltre, mi sono sentito parlare di biblioteca. Posso chiedere di riprendere il voto negativo? :) –

1

In sintesi:

Se si utilizza cargo new xxx --bin, troverete il file nella directory src si chiama main.rs. E quando controlli il file Cargo.toml. È lo stesso di come hai scritto. Quindi il primo modo è di cambiare il file in src a main.rs

Come rapporto sul carico, possiamo usare il [[bin]] per impostare il file. @Shepmaster lo ha risolto.

Entrambi i modi possono funzionare.

+0

Puoi spiegare quali nuove informazioni fornisce questa risposta rispetto alla risposta esistente? – Shepmaster

+0

Va bene, ho appena scoperto che la tua risposta ha spiegato entrambi i due modi. @ Shepmaster, in realtà, sono nuovo di ruggine e ho riscontrato lo stesso problema, quindi ho postato la risposta quando l'ho risolta. –