According to its manual,货物包装可以有多个可执行目标,但只允许一个库目标。
一个包可以包含零个或一个库箱,以及任意数量的二进制箱。程序包中必须至少有一个板条箱(库或二进制文件)。
为什么只限于一个?原因和好处是什么?
答案 0 :(得分:3)
Cargo主要是包裹管理者。因此,包的主要作用是定义一个库。
当使用板条箱作为依赖项时,我们仅在Cargo.toml
中指定包名称。由于最多可以有一个库,因此Cargo不需要您指定要使用哪个库。如果允许在同一个程序包中定义多个库,那么我们需要指定一种方法来定义它们之间的依赖关系,因此您将有两种方法来声明依赖关系(外部程序包与内部包装箱),从而使系统更复杂。
另一方面,添加不提供库的依赖项是没有意义的,至少对于Cargo而言是没有意义的,因为Cargo只关心该上下文中的库目标。因此,没有理由将其他类型的目标(二进制文件,示例,测试等)限制为一个。
答案 1 :(得分:0)
我希望这是因为包中的library crate
已经是集合(函数,类型,值等),而binary crates
是不透明的可执行文件(具有主入口点) 。因此,库文件箱名称仅是其层次结构中的根模块,而二进制文件箱名称是其整体,并且位于包的顶级。