nro*_*niv 7 rust rust-crates rust-cargo
我对crates.io上托管的确切事物感到有点困惑(这是一个'crate'正确引用它们的方式)?我的理解是一个crate是Rust中的一个编译单元,但是crates和crates.io之间的映射是什么?例如,宏上的Rust编程语言附录说,因为每个箱子只能有一个程序宏:
我们的两个箱子紧密相关,因此我们在箱子的目录中创建程序宏
hello_macro箱.如果我们改变了特征定义hello_macro,我们也必须改变过程宏的实现hello_macro_derive.这两个板条箱需要单独发布,使用这些板条箱的程序员需要将它们作为依赖项添加,并将它们都纳入范围.我们可以将hello_macro cratehello_macro_derive用作依赖项并重新导出过程宏代码.但是我们构建项目的方式使得程序员hello_macro即使不想要这些derive功能也可以使用.
它必须在crates.io上单独发布.这看起来非常清楚:crates.io上的箱子与本地箱子相同,并且映射是一对一的.
但是,在讨论具有可执行文件和库的项目时,它意味着它们是单独的包,但不需要单独发布.例如,sccache repo有main.rs和lib.rs. 单独的二进制包是不是实际存储在crates.io上而只存在于repo中?那么货物安装如何确定安装什么?
什么是"套餐"?
我试图运行cargo package包含二进制和库目标的示例项目.并且两者都被添加到.cargo文件中(顺便说一下,.cargo档案的确切格式是在任何地方记录的吗?).这仍然让我感到困惑.我们可以将多个板条箱作为一个包的一部分发布吗?那么我们应该将crates.io中存储的内容称为包吗?我是否正确地假设每个包可以包含多个二进制包,但只包含一个库包?这是我目前的理解.
crates.io 上托管的确切内容是包内的 crates。
甲箱是编译器的输出构件。
来自Rust 参考手册:
编译模型以称为 crate 的工件为中心。每次编译都以源代码形式处理单个 crate,如果成功,则生成一个二进制形式的单个 crate:可执行文件或某种库。
一包是由货物,锈包管理器管理的神器。
Cargo.toml 清单文件使用以下语法定义包:
[package]
name = "hello_world"
version = "0.1.0"
authors = ["Your Name <you@example.com>"]
Run Code Online (Sandbox Code Playgroud)
一个包可以包含一个或多个包,例如一个库包,命名为包名称和零个或多个可执行包,每个包都[[bin]]在清单文件的一个部分内明确定义,或者如果位于src/bin包目录内则隐式定义。
该货运本书使用术语板条箱包装的别名。考虑以下语句以尝试理解:
通常*一个包的主要工件是一个库 crate,因为它用包名来标识,所以习惯上将 package 和 crate 视为同义词。
*:一个包可能只包含一个二进制文件,例如参见ripgrep
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |