我可以在没有 Cargo.toml 的情况下使用 Cargo 安装库吗?

Can I install a library using Cargo without a Cargo.toml?

我正在学习 Rust 入门,我需要在我的系统上安装 the rand crate。我没有做 Cargo 包装的东西(例如创建 Cargo.toml),因为我对语言感兴趣,而不是包装。

我可以在不使用 cargo 命令创建 Cargo.toml 的情况下在我的系统上安装 rand 库吗?

$ cargo install rand
    Updating registry `https://github.com/rust-lang/crates.io-index`
specified package has no binaries

实用答案

没有。使用货物。 使用起来非常简单,它可以防止您在管理版本(和冲突版本)时搬起石头砸自己的脚。

because I was interested in the language, not packaging.

从 99.9% 的 Rust 用户的角度来看,Cargo 语言的一部分,或者至少是 Rust 生态系统的一部分。您可能期望在其他语言标准库中提供的许多东西都在板条箱中提供(随机数生成就是一个很好的例子)。

install the library on my system

最终,这没有意义。没有可以安装的库的唯一真实版本。每个使用 crate 的程序都可能使用不同的版本,因为它有不同的需求。更进一步,您可以为不同的项目以不同的方式编译 crate - crate 具有 特性 可以改变它们的编译方式。

cargo install rand

这实际上是一种使用 Cargo 构建整个 Rust 项目的方法,该项目提供 binary 并将其安装在您的系统上。这更有意义,因为它是一个单一的、包含的实体。不幸的是,正是因为这个原因,它可能会让人感到困惑!

另请参阅:

技术上正确的答案

你当然可以;你只需要手动完成 Cargo 为你做的一切。这涉及

  1. 正在下载包。
  2. 这也意味着包的任何依赖项。
  3. 以及正确的版本。
  4. 编译包。
  5. 和依赖项。
  6. 维护依赖树并将其传递给每个后续包。
  7. 最后,您可以编译代码了。

编译单个库和使用该库的单个可执行文件的具体示例:

$ rustc --edition=2018 --crate-type=rlib --crate-name library_example src/lib.rs -o libmy_library.rlib
$ rustc --edition=2018 --extern library_example=libmy_library.rlib examples/main.rs