rust - 配置/安装使用 Rust Cargo 作为构建系统的软件的预期/计划方式是什么?

标签 rust rust-cargo

现有的构建系统通常有某种安装目标,可以手动使用(用于安装在/usr/local 或用户可以访问的其他位置)或自动使用(由基于二进制的发行版的包构建系统或由包管理器使用)基于源的)。

安装使用 Cargo 的软件的预期方式是什么? make install 的模拟应该是什么样子?

Cargo 本身使用额外的 configure/make 来处理配置、检测系统依赖性、运行 cargo build 和安装。

对于使用 Cargo 构建的任何其他软件来说,这是正确的方法吗?这意味着是否有计划由 Cargo 本身来完成这些任务,或者 Cargo 是否仅打算作为依赖项获取和编译的工具,而不对已安装的 deps/安装进行任何配置/检测?

或者是否有计划添加此功能?

最佳答案

cargo 安装

截至Rust 1.5你可以使用 cargo install 来安装 binary crates到你的系统上。您可以从以下位置安装 crate:

  • crates.io(默认),使用 cargo install crate_name
  • 任何 git 存储库,使用 cargo install --git repository_url
  • 任何目录,使用 cargo install --path/path/to/crate

前两个有您可以指定的附加选项:

  • 对于 crates.io,您可以使用 --vers 指定 crate 版本。
  • 对于 git 存储库,您可以使用 --branch 设置要安装的分支,--tag 指定要使用的标记版本,以及 --rev 从特定提交构建。

安装位置:

cargo install 可以通过以下方法配置为安装在自定义目录中,按优先顺序(最高优先):

  • 通过传递 --root/path/to/directory(此路径可以是相对的)
  • 通过设置$CARGO_INSTALL_ROOT环境变量
  • 通过设置 install.root configuration key
  • 通过设置$CARGO_HOME环境变量(影响的不仅仅是cargo install的安装目录)

如果以上都不存在,cargo 将在 ~/.cargo/bin 中安装 crate。

在上述所有情况下,输出文件实际上将放置在 bin 子目录中(例如 --root/path/to/directory 将实际放置输出在 /path/to/directory/bin).

卸载

cargo uninstall 可用于删除以前安装的包。如果您安装了多个同名的 crate,您可以指定 --root 以仅删除该目录中的版本。

示例:我想使用 rustfmt :

我可以使用 crates.io 上的版本:

  • cargo 安装 rustfmt

我喜欢使用原始版本:

  • cargo 安装 rustfmt --vers 0.0.1

我想把它安装在 /opt/rust_crates 中:

  • cargo install rustfmt --root/opt/rust_crates

我真的需要使用最先进的版本:

  • cargo install --git https://github.com/rust-lang-nursery/rustfmt.git

最新的提交有一个错误!

  • cargo install --git https://github.com/rust-lang-nursery/rustfmt.git --rev f5bd7b76e0185e8dd37ae6b1b5fb5e11187f0b8c

我真的很想要使用 git 子模块作为其依赖项的版本:

  • cargo install --git https://github.com/rust-lang-nursery/rustfmt.git --branch submods

我克隆了它并做了一些编辑:

  • cargo install --path ~/my_rustfmt

实际上,我坚持完全手动进行格式化:

  • cargo 卸载 rustfmt

关于rust - 配置/安装使用 Rust Cargo 作为构建系统的软件的预期/计划方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25233487/

相关文章:

data-structures - 何时使用 Box<Vec<..>> 或 Vec<Box<..>>?

rust - 错误 : duplicate lang item in crate `sp_io`

rust - 当 native 库不存在时,如何构建 FFI crate 的 docs.rs 文档?

rust - 沙沙线练习,为什么不取消对Mutex(Struct)的引用?

rust - 如何使用 Cargo 修补 crates-io 的路径?

rust - 通过 if 语句绑定(bind)的变量无法正常工作

rust - 如何使用不同版本的 Rust 编译器构建依赖关系?

rust - Rust 的一元 || 是什么意思(平行管)是什么意思?

binaryfiles - 用于检查 .rlib 二进制文件的 Rust 库

rust - 如何在 Rust 中实现 C 灵活数组成员模式?