现有的构建系统通常有某种安装目标,可以手动使用(用于安装在/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/