【问题标题】:failed to parse manifest - no targets specified未能解析清单 - 未指定目标
【发布时间】:2016-09-26 06:18:51
【问题描述】:

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

无济于事。

【问题讨论】:

    标签: rust rust-cargo


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 非常感谢,我从来没想过,在这里解决了问题。
      • 这是为什么呢?这是一个错误吗?
      • 不,不是错误,cargo 试图找到项目的根目录。它以这种方式工作,允许您在工作区的 subcrate 文件夹中运行 cargo 命令。
      【解决方案3】:

      正如错误所说:

      src/lib.rssrc/main.rs[lib] 部分或 [[bin]] 部分必须存在

      所以直接回复add a [[bin]] section

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

      但是,更常见的做法是将文件放在预期的位置:src/main.rs。如果您打算拥有多个二进制文件,也可以将其放在 src/bin/test.rs 中。

      如果它实际上是为了测试您的代码,那么单元测试与他们正在测试的代码放在同一个文件中,而集成测试放在tests/foo.rs 中。

      【讨论】:

      • 谢谢,这很有帮助!
      • 我在安装 IntelliJ IDEA 时遇到了问题,对此感到困惑,但这解决了 intellij IDEA 错误。
      【解决方案4】:

      总结一下:

      如果你使用cargo new xxx --bin,你会发现src目录下的文件名为main.rs。当您检查文件Cargo.toml。和你写的一样。所以第一种方法是将src中的文件改成main.rs

      作为货物报告,我们可以使用[[bin]]来设置文件。 @Shepmaster 已经解决了。

      两种方式都可以。

      【讨论】:

      • 你能解释一下这个答案与现有答案相比提供了哪些新信息吗?
      • 好吧,我刚刚发现你的答案已经解释了两种方式。@Shepmaster,其实我是 rust 新手,我遇到了同样的问题,所以我在解决时发布了这个答案它。
      【解决方案5】:

      在我的情况下,也可能在你的情况下,rs 文件未命名为 main.rs,而 Cargo 假定 src/main.rs 是二进制 crate 的 crate 根。因此,规则是如果项目是可执行文件,则将主源文件命名为src/main.rs。如果是库,将主源文件命名为src/lib.rs

      此外,Cargo 还将把位于 src/bin/*.rs 中的任何文件视为可执行文件,如上一个答案中所述。

      【讨论】:

      • 您能否进一步扩展以突出显示此答案与其他答案的不同之处?另一个答案已经说“将文件放在预期的位置:src/main.rs
      • @Shepmaster 感谢您的提问。在我的回答中,如果有人使用任何其他名称但仍在位置:srs,我试图明确突出显示文件的“重命名”为main.rs。您的回答中没有明确提到它必须是 main.rs 文件并且没有其他名称。此外,我觉得提到图书馆。我可以要求收回反对票吗? :)
      猜你喜欢
      • 1970-01-01
      • 2014-03-03
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      相关资源
      最近更新 更多