为什么货运包裹只能有一个库目标?

时间:2019-02-23 15:27:36

标签: rust rust-cargo

According to its manual,货物包装可以有多个可执行目标,但只允许一个库目标。

  

一个包可以包含零个或一个库箱,以及任意数量的二进制箱。程序包中必须至少有一个板条箱(库或二进制文件)。

为什么只限于一个?原因和好处是什么?

2 个答案:

答案 0 :(得分:3)

Cargo主要是包裹管理者。因此,包的主要作用是定义一个库。

当使用板条箱作为依赖项时,我们仅在Cargo.toml中指定包名称。由于最多可以有一个库,因此Cargo不需要您指定要使用哪个库。如果允许在同一个程序包中定义多个库,那么我们需要指定一种方法来定义它们之间的依赖关系,因此您将有两种方法来声明依赖关系(外部程序包与内部包装箱),从而使系统更复杂。

另一方面,添加不提供库的依赖项是没有意义的,至少对于Cargo而言是没有意义的,因为Cargo只关心该上下文中的库目标。因此,没有理由将其他类型的目标(二进制文件,示例,测试等)限制为一个。

答案 1 :(得分:0)

我希望这是因为包中的library crate已经是集合(函数,类型,值等),而binary crates是不透明的可执行文件(具有主入口点) 。因此,库文件箱名称仅是其层次结构中的根模块,而二进制文件箱名称是其整体,并且位于包的顶级。