【问题标题】:Can I install a library using Cargo without a Cargo.toml?我可以在没有 Cargo.toml 的情况下使用 Cargo 安装库吗?
【发布时间】:2016-04-23 17:08:28
【问题描述】:

我正在经历 Rust 的入门,我需要在我的系统上获取 the rand crate。我没有做 Cargo 包装的事情(例如创建 Cargo.toml),因为我对语言感兴趣,而不是包装。

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

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

【问题讨论】:

    标签: rust rust-cargo


    【解决方案1】:

    实用答案

    没有。使用货物。它非常容易使用,它可以防止您在管理版本(和冲突版本)时自欺欺人。

    因为我对语言感兴趣,而不是包装。

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

    在我的系统上安装库

    最终,这没有意义。没有一个可以安装的库的真实版本。每个使用 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
    

    【讨论】:

    • 感谢您提供如此详细的回答。小的后续问题:所以我在我的项目中;当我运行cargo build 时,cargo 将编译所有依赖项并将它们存储在target/debug/deps/
    • @SummerBreeze 是的!当你在发布模式下编译时,它是target/release,而文档在target/docs。下载的源代码放在$HOME/.cargo,因为它可以在项目之间共享。构建的工件是特定于项目的。
    • 我希望更多的人能提供帮助;非常感谢!
    • 这是一个“安装”我刚刚遇到的库的用例:我正在尝试安装一些需要 172 个依赖项的东西。由于某些系统配置问题,依赖项 #115 无法构建。摆弄系统配置我需要重新运行“cargo install some-thing”命令,等待前 114 个依赖项构建(是的,并行,仍然需要一段时间并且很糟糕)才能到达失败。如果我可以做cargo can-install the-specific-dependency,它的行为就像一个板条箱需要依赖并尝试构建它,它会减轻很多痛苦。
    • @OrenBen-Kiki 在这种情况下,cargo install 将打印出它使用的目录(可能在系统临时目录中)。然后,您可以将 cargo install --target-dir ... 与该路径一起使用以从失败的路径恢复。
    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2015-11-05
    相关资源
    最近更新 更多