rust 为什么一个Cargo包只能有一个库目标?

lstz6jyr  于 2022-11-12  发布在  Go
关注(0)|答案(2)|浏览(295)

According to its manual,Cargo软件包可以有多个可执行目标,但只允许有一个库目标。
一个软件包可以包含零个或一个库板条箱和任意多个二进制板条箱。一个软件包中必须至少有一个板条箱(库或二进制)。
为什么只限于一个?原因和好处是什么?

ql3eal8s

ql3eal8s1#

Cargo主要是一个包管理器,因此,包的主要作用是定义一个库。
当我们使用crate作为依赖项时,我们只在Cargo.toml中指定包名。由于最多只能有一个库,Cargo不需要您指定要使用哪个库。如果允许在同一个包中定义多个库,那么我们需要指定一种方法来定义它们之间的依赖项。因此我们有两种方法来声明依赖关系(外部包与内部包),这使得系统更加复杂。
另一方面,添加一个不提供库的依赖项是没有意义的,至少对Cargo来说是这样,因为Cargo只关心该上下文中的库目标。因此,没有理由将其他类型的目标(二进制文件、示例、测试等)限制为一个。

rjee0c15

rjee0c152#

我认为一个cargo包只能有一个库目标,因为library crate定义为一个项的集合(函数、类型、特征、宏、值等),而binary crate只有一个外部可见的东西,即主入口点。因此,虽然库的名称只是层次结构中的根模块,但二进制的名称是唯一的东西。

相关问题