【问题标题】:Why can a Cargo package only have one library target?为什么一个 Cargo 包只能有一个库目标?
【发布时间】:2019-07-17 11:51:50
【问题描述】:

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

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

为什么限制为一个?有什么原因和好处?

【问题讨论】:

  • 拥有多个库有什么好处?
  • @Shepmaster 好问题。拥有多个可执行文件的好处是否相同?

标签: rust rust-cargo


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多