什么是包装、板条箱和模块



我读过用包、板条箱和模块管理不断增长的项目,但我仍然不太了解层次结构。我知道什么是板条箱,包装中应该至少有一个板条箱:最多1个库板条箱和0个或更多的二进制板条箱。

第一:假设我想把lib.rsmain.rs板条箱都装在包装里。如何在main.rs中从lib.rs访问/调用函数?

第二:当我用cargo new --lib library-name创建新库时,它会创建具有该名称的目录和那里的一堆文件,我想在src/main.rs中调用该库中的函数的唯一方法是:

mod some_library;
use crate::library_name::library_name::foo;
fn main() {
foo();
}
// Filename: src/library_name.rs
pub mod library_name; // I don't really understand this
// Filename: src/library_name/library_name.rs
pub fn foo() { 
// ... 
}

其中我有以下层次结构:

- package_name
- src
- library_name
- src
- lib.rs
- Cargo.toml
- library_name.rs
- library_name.rs
- main.rs
- Cargo.toml

src/library_name.rs是否需要与src/library_name库同名?我真的很困惑。

它是一个由三个或四个级别组成的层次结构。

  1. 工作区(可选(:顶部是工作区。工作区由一个或多个包组成。Cargo.toml文件是特殊的,或多或少只列出工作空间成员。

    工作空间是可选的,用于大型项目。只有一个包的较小项目不需要它们。在这种情况下,我们可以忽略工作区。我们在顶部有一个包,层次结构只有三个层次。

  2. 包裹:然后是包裹。一个包包含一个真正的Cargo.toml文件。一个包裹可以装成板条箱。

  3. 板条箱:板条箱是从包中编译的库或可执行文件。库机箱以lib.rs文件为起点。可执行机箱以main功能为起点。一个包最多可以编译成一个库和几个可执行文件。

  4. 模块:然后是模块。模块是Rust在源代码中组织(如structenum、函数和其他项(的分层方式。

如何使用它为项目提供唯一的名称?

答:完全限定名称从包开始,然后是一系列模块名称,最后是项目名称。

一个例子:

serde::de::value::StringDeserializer(参见此处(具有作为封装的serde,作为模块路径的de,然后是value,然后struct被称为StringDeserializer

板条箱在哪里?

包装serde只有一个板条箱,即库。如果您查看包的Cargo.toml,则没有列出任何二进制文件。

(人们往往对包装和板条箱感到困惑。即使有时我也不准确,当我指的是包装时,我会说"serde crate"。(

简而言之:是一个名称下的代码(例如serde(。机箱是一个库或可执行文件。

最新更新