我是Rust的新手,正在尝试用Cargo构建一个测试项目。我的Cargo.toml
看起来像:
[package]
name = "rust-play"
version = "0.0.1"
authors = [ "Bradley Wogsland <omitted>" ]
(but实际的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"
但毫无结果
6条答案
按热度按时间7rtdyuoh1#
正如错误所说:
必须存在
src/lib.rs
、src/main.rs
、[lib]
部分或[[bin]]
部分所以直接的答案是添加一个
[[bin]]
部分:然而,更常见的是将文件放在预期的位置:
src/main.rs
。如果您计划使用多个二进制文件,也可以将其放在src/bin/test.rs
中。如果它实际上是为了测试代码,那么单元测试放在与它们正在测试的代码相同的文件中,而集成测试放在
tests/foo.rs
中。pxyaymoc2#
Cargo.toml
文件复制到crate的父文件夹中,也可能会遇到此错误。9ceoxa923#
在我的例子中,可能在你的例子中,rs文件没有命名为
main.rs
,而Cargo假设src/main.rs
是二进制crate的crate根。因此,规则是,如果项目是可执行文件,则将主源文件命名为src/main.rs
。如果它是库,则将主源文件命名为src/lib.rs
。此外,Cargo还将把位于
src/bin/*.rs
中的任何文件视为可执行文件,如前面的回答中所述。czfnxgou4#
我在Ubuntu 20.04上遇到了这个问题,因为我无意中将
Cargo.toml
复制到了我的主文件夹中。尽管我的工作目录有一个正确定义的Cargo.toml
,但$HOME
中的副本优先并导致构建失败。jmo0nnb35#
总结如下:
如果你使用
cargo new xxx --bin
,你会发现src
目录下的文件名为main.rs
。当你检查文件Cargo.toml
时。它和你写的一样。所以第一种方法是将src中的文件改为main.rs
作为货物报告,我们可以使用
[[bin]]
来设置文件。@Shepmaster已经解决了。两种方式都可以工作。
e4eetjau6#
我也有这个问题,这是因为父目录也包含Cargo.toml文件,它优先于当前目录中的文件