【问题标题】:File layout for multiple executables in a library crate [duplicate]库箱中多个可执行文件的文件布局[重复]
【发布时间】:2019-09-09 12:28:15
【问题描述】:

我想创建一个带有两个二进制 crate 和一个包含共享代码的库的 rust 包。我知道如何通过将二进制文件的源文件放在src/bin/ 子目录(例如src/bin/firstbin.rs 和src/bin/secondbin.rs)和库代码在src/ 或src/lib/ 中来为一个简单的程序执行此操作。

但是,如果二进制文件有大量不属于库的非共享代码,并且我想将它们的源代码拆分为多个文件,我不确定如何布置源文件。我正在考虑将src/bin/firstbin/ 用于仅属于第一个二进制文件的文件,将src/bin/secondbin/ 用于第二个二进制文件。但是,我不确定如何从firstbin.rs 和secondbin.rs 引用这些文件。

那么这是正确的方法吗?如果是,我该如何引用这些文件?如果不是,最好的布局是什么?

【问题讨论】:

  • 只有一个包是强制性的吗?如果我是你,我会使用不同的板条箱。
  • 我是 rust 新手,所以仍在寻找最佳方法。不过,将其拆分成多个包似乎有点过头了。代码密切相关,我希望它能够保持在一起。例如,我希望这一切都在一个 git 存储库中。显然,在一个包中存在多个二进制文件的一些期望 - 因此支持 src/bin 目录中的多个源文件 - 但如果它们只是单个文件,除非你有非常大的文件,否则这似乎非常有限。如果可能的话,我更喜欢将源文件保持在不超过 100 到 200 行的范围内。
  • 您可以在一个项目中拥有多个 crate(包):github.com/amethyst/amethyst/blob/master/Cargo.toml#L79 IMO,当您的二进制文件的唯一功能是调用您的库时,将一个库和一个二进制文件混合在一个 crate 中很有用,当所有的工作都完成了。对于更复杂的项目,最好将其拆分到不同的 crate 中。
  • 哇!这让我有点不知所措——我的 Cargo.toml 文件都少于 10 行!拆分成不同的 crate 是指不同的包吗?
  • 如果您要购买多个板条箱,请查看工作区:doc.rust-lang.org/cargo/reference/…

标签: rust rust-cargo


【解决方案1】:

您可以将您的fn main() 放入src/bin/firstbin/main.rs 并在同一目录中为子模块添加更多文件。这在 Cargo 手册的this section 中有记录(在正文中,灰色框是错误的)。

【讨论】:

  • 谢谢 - 这正是我想要的。
  • 我能问一下你为什么编辑我的问题的标题吗?我认为这不太正确,因为我专门询问了一个包中的三个 crate:一个库 crate 和两个二进制 crate。可执行文件不在库 crate 中 - 它们是包中的 crate。
  • 不要对 crate 和 package 太挑剔,大多数人都会使用 crate。我必须检查一下手册中何时添加了该区别,这对我来说是最近的(但我可能错了)。
猜你喜欢
  • 2012-03-29
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 2016-06-17
相关资源
最近更新 更多