According to its manual,Cargo软件包可以有多个可执行目标,但只允许有一个库目标。
一个软件包可以包含零个或一个库板条箱和任意多个二进制板条箱。一个软件包中必须至少有一个板条箱(库或二进制)。
为什么只限于一个?原因和好处是什么?
According to its manual,Cargo软件包可以有多个可执行目标,但只允许有一个库目标。
一个软件包可以包含零个或一个库板条箱和任意多个二进制板条箱。一个软件包中必须至少有一个板条箱(库或二进制)。
为什么只限于一个?原因和好处是什么?
2条答案
按热度按时间ql3eal8s1#
Cargo主要是一个包管理器,因此,包的主要作用是定义一个库。
当我们使用crate作为依赖项时,我们只在
Cargo.toml
中指定包名。由于最多只能有一个库,Cargo不需要您指定要使用哪个库。如果允许在同一个包中定义多个库,那么我们需要指定一种方法来定义它们之间的依赖项。因此我们有两种方法来声明依赖关系(外部包与内部包),这使得系统更加复杂。另一方面,添加一个不提供库的依赖项是没有意义的,至少对Cargo来说是这样,因为Cargo只关心该上下文中的库目标。因此,没有理由将其他类型的目标(二进制文件、示例、测试等)限制为一个。
rjee0c152#
我认为一个cargo包只能有一个库目标,因为
library crate
定义为一个项的集合(函数、类型、特征、宏、值等),而binary crate
只有一个外部可见的东西,即主入口点。因此,虽然库的名称只是层次结构中的根模块,但二进制的名称是唯一的东西。