关于 rust 中的板条箱、包和模块的非常基本的问题

问题描述 投票:0回答:1
 ~/rust/first
   src
  │  app
  │ │  src
  │ │ │  lib.rs
  │ │ └  entry.rs                  E
  │ └  Cargo.toml
  └  main.rs                     E 
   Cargo.lock                     
   Cargo.toml                     

这是我用 Rust 建立的第一个项目。

struct Entry{}
中有一个
src/app/src/entry.rs
。 顶级
Cargo.toml
在其
members = ["src/app"]
部分列出了
[workspace]
app
级别
Cargo.toml
定义
[package]name="app"

在顶层

main.rs
我只有
let app = app::Entry::new();
,但编译器说“使用未声明的板条箱或模块
app
”。

为什么在子目录中声明包“app”,然后将其定义为顶层工作区中的成员,不足以让

Entry
在顶层 main.rs 中看到?

如果我将

app = { path = "./src/app" }
添加到
dependencies
部分,那么它就可以工作。 但那为什么要有工作区成员呢?

我错过了什么?

rust module
1个回答
0
投票

A workspace 是一个或多个包的集合,称为 工作区成员,一起管理。

工作空间的要点是:

  • 常用命令可以在所有工作区成员上运行,例如
    cargo check --workspace
  • 所有包共享一个通用的
    Cargo.lock
    文件,该文件位于 工作空间根中。
  • 所有包共享一个公共的输出目录,默认为
    工作空间根
    中名为target的目录。
  • 共享包元数据,例如
    workspace.package
  • [patch]
    中的
    [replace]
    [profile.*]
    Cargo.toml
    部分仅
    在 root 清单中被识别,并在成员箱中被忽略
    体现出来。

-- https://doc.rust-lang.org/stable/cargo/reference/workspaces.html

工作区成员不会自动相互依赖。这实际上是不可能的,因为这意味着板条箱之间存在循环依赖关系。

© www.soinside.com 2019 - 2024. All rights reserved.