rust 无法分析清单-未指定目标

x6yk4ghg  于 2023-04-21  发布在  其他
关注(0)|答案(6)|浏览(217)

我是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"

但毫无结果

7rtdyuoh

7rtdyuoh1#

正如错误所说:
必须存在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中。

pxyaymoc

pxyaymoc2#

  • 替代问题和解决方案:* 如果您将Cargo.toml文件复制到crate的父文件夹中,也可能会遇到此错误。
9ceoxa92

9ceoxa923#

在我的例子中,可能在你的例子中,rs文件没有命名为main.rs,而Cargo假设src/main.rs是二进制crate的crate根。因此,规则是,如果项目是可执行文件,则将主源文件命名为src/main.rs。如果它是库,则将主源文件命名为src/lib.rs
此外,Cargo还将把位于src/bin/*.rs中的任何文件视为可执行文件,如前面的回答中所述。

czfnxgou

czfnxgou4#

我在Ubuntu 20.04上遇到了这个问题,因为我无意中将Cargo.toml复制到了我的主文件夹中。尽管我的工作目录有一个正确定义的Cargo.toml,但$HOME中的副本优先并导致构建失败。

jmo0nnb3

jmo0nnb35#

总结如下:
如果你使用cargo new xxx --bin,你会发现src目录下的文件名为main.rs。当你检查文件Cargo.toml时。它和你写的一样。所以第一种方法是将src中的文件改为main.rs
作为货物报告,我们可以使用[[bin]]来设置文件。@Shepmaster已经解决了。
两种方式都可以工作。

e4eetjau

e4eetjau6#

我也有这个问题,这是因为父目录也包含Cargo.toml文件,它优先于当前目录中的文件

相关问题