如何在 Rust 中使用外部板条箱?

问题描述 投票:0回答:5

我正在尝试使用 rust-http 库,并且我想将其用作小项目的基础。

我不知道如何使用无法通过

rustpkg install <remote_url>
安装的东西。事实上,我今天发现
rustpkg
现已被弃用。

如果我

git clone
库并运行适当的
make
命令来构建它,我如何在其他地方使用它? IE。我该如何实际使用
extern crate http

rust dependencies rust-cargo rust-crates
5个回答
43
投票

自 Rust 1.0 以来,99% 的用户将使用 Cargo 来管理项目的依赖项。该文档的 TL;DR 是:

  1. 使用

    cargo new

    创建项目
  2. 编辑生成的

    Cargo.toml
    文件以添加依赖项:

    [dependencies]
    old-http = "0.1.0-pre"
    
  3. 在代码中访问板条箱:

    Rust 2021 和 2018

    use old_http::SomeType;
    

    生锈 2015

    extern crate old_http;
    use old_http::SomeType;
    
  4. 使用

    cargo build

    构建项目

Cargo 将负责管理版本,在需要时构建依赖项,并将正确的参数传递给编译器以将所有依赖项链接在一起。

阅读 Rust 编程语言,了解有关 Cargo 入门的更多详细信息。 Cargo 书中的指定依赖项详细介绍了您可以添加哪些类型的依赖项。


24
投票

更新

对于现代 Rust,请参阅 this 答案。


原答案

您需要将

-L
标志传递给
rustc
以将包含已编译的 http 库的目录添加到搜索路径。像
rustc -L path-to-cloned-rust-http-repo/build your-source-file.rs
这样的事情应该可以。

教程参考


4
投票

与您的帖子无关,但与您的标题相关。另外,以货物为基础。

最佳实践:

  1. 外部板条箱名为
    foo
use ::foo;
  1. 模块(属于代码/板条箱的一部分)名为
    foo
use crate::foo;

在这两种情况下,您都可以使用

use foo;
代替,但这可能会导致混乱。


2
投票

构建完成后,您可以在代码中使用普通的

extern crate http;
。唯一的技巧是您需要将适当的
-L
标志传递给
rustc
来告诉它在哪里可以找到
libhttp

如果您的项目中的

rust-http
目录中有一个子模块,并且它构建到其根目录中(我实际上不知道
make
中的
rust-http
存放生成的库),那么您可以构建自己的子模块使用
rustc -L rust-http pkg.rs
进行项目。使用该
-L
标志,
extern crate http;
中的
pkg.rs
行将能够在
libhttp
子文件夹中找到
rust-http


0
投票

我遇到了类似的问题。我最终在我的 Cargo.toml 中这样做了

[dependencies]
shell = { git = "https://github.com/google/rust-shell" }

然后在我的 main.rs 中我可以添加它并成功编译。 请注意,在我的例子中,这个货物包是一个宏。通常你不希望在外部调用之前有#[macro_use]。

#[macro_use] extern crate shell;
© www.soinside.com 2019 - 2024. All rights reserved.