现有的构建系统通常具有某种安装目标,可以手动(用于安装在/ usr / local或用户可以访问的其他位置)或自动(通过基于二进制的发行版的包构建系统或包管理器)使用基于源的)。
安装使用Cargo的软件的预期方式是什么? make install
的类似物应该是什么样的?
Cargo本身使用额外的配置/制作来处理配置,检测系统依赖性,运行cargo build
和安装。
对于使用Cargo构建的任何其他软件,这是否正确?这意味着是否有计划通过Cargo本身来完成这项任务,或者Cargo是否只是作为依赖程序获取和编译的工具而没有任何配置/检测已安装的deps /安装?
或者是否有计划添加此功能?
答案 0 :(得分:13)
cargo install
从Rust 1.5开始,您可以使用cargo install
将binary crates安装到您的系统上。您可以从以下位置安装包装箱:
cargo install crate_name
cargo install --git repository_url
cargo install --path /path/to/crate
前两个可以指定其他选项:
--vers
指定包装箱版本。--branch
设置要从中安装的分支,--tag
以指定要使用的标记版本,并--rev
从特定提交构建。< / LI>
cargo install
配置为按优先顺序(最高优先级)通过以下方法安装在自定义目录中:
--root /path/to/directory
(此路径可以是相对的)$CARGO_INSTALL_ROOT
环境变量install.root
configuration key $CARGO_HOME
环境变量(会影响cargo install
以上的安装目录)如果上述情况均不存在,货物将在~/.cargo/bin
安装包装箱。
在上述所有情况下,输出文件实际上都会放在bin
子目录中(例如--root /path/to/directory
实际上会将输出放在/path/to/directory/bin
)。
cargo uninstall
可用于删除以前安装的包装箱。如果您安装了多个具有相同名称的包,则可以指定--root
以仅删除该目录中的版本。
我可以在crates.io上使用该版本:
cargo install rustfmt
我喜欢使用原始版本:
cargo install 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 uninstall rustfmt
答案 1 :(得分:0)
(此答案适用于希望分发自己的程序的开发人员,而不是已收到Cargo项目并需要在自己的系统上安装它的用户;这是Toby的答案的域。)
Cargo的安装功能并不是发行Rust程序的主要方式。它仅设计用于分发给其他Rust开发人员。使用此功能有几个缺点:
cargo install
,否则软件包将仅为当前用户安装。换句话说,cargo install
是货运程序的make && sudo make install
;除非主要用于Rust程序员,否则它不是分发Rust程序的理想方法。
让我们看看替代方案。
您只需使用cargo install
就可以复制cargo build --release
的效果。这将在target/release/crate_name
中放置一个(通常会看到以下缺点的)静态链接的板条箱二进制文件,并且可以将其重新包装为.tar.gz
或.zip
并分发给其他用户。>
.tar.gz
/ .zip
是非标准的,通常对于大多数用户而言并不理想。libc
以外的任何系统依赖项,则将无法加载它们,并带来难以理解的错误。使用基于云的CI服务可以重新创建任何这些方法。例如,使用Travis CI,您可以使用Trust项目以与从tarball大致相同的方式自动进行部署,但只需标签就可以自动进行部署。
(加上tarball的所有优点)
.tar.gz
/ .zip
,这意味着仍然给用户带来不便,并且缺乏系统依赖性管理。除了Travis之外,请参阅Appveyor和GitHub Actions作为可能的构建平台。
这被认为是许多最终用户的理想方法,并且是分发任何程序(不仅仅是Cargo程序)的标准方法。这缓解了tarball方法的几乎所有问题,尽管并非没有其自身的一些问题。
最好使用其他工具来处理这种方法:
这些通常是开发人员要运行的工具,用于创建用于生成软件包的文件。有关更多信息,请参阅他们自己的文档。