乐趣区

关于rust:Rust-的包管理工具-Cargo

Cargo 是 Rust 工具链中内置的构建零碎及包管理器。它能够解决泛滥诸如构建代码、下载编译依赖库等琐碎但重要的工作,绝大部分的 Rust 用户都会抉择它来治理本人的 Rust 我的项目。

创立我的项目

治理 Rust 我的项目及其模块依赖(Crate)

查看 Cargo 版本

$ cargo --version

创立一个我的项目

$ cargo new hello_cargo

执行完以上命令后,Cargo 会以同样的名字创立我的项目目录并搁置它生成的文件。进入 hello_cargo 文件夹,能够看到 Cargo 刚刚生成的两个文件与一个目录:一个名为 Cargo.toml 的文件,以及一个名为 main.rs 的源代码文件,该源代码文件被搁置在 src 目录下。同时,Cargo 还会初始化一个新的 Git 仓库并生成默认的 .gitignore 文件

Cargo.toml

cargo.tlml 是生成的规范配置文件,内容如下:

[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["Your Name <you@example.com"]
edition = "2018"

[dependencies]

最初一行文本中的 [dependencies] 是一个区域标签,它表明随后的区域会被用来申明我的项目的依赖。

Cargo 会默认把所有的源代码文件保留到 src 目录下,而我的项目根目录只被用来寄存诸如 README 文档、许可申明、配置文件等与源代码无关的文件。

构建和运行我的项目

编译程序

在以后的 hello_cargo 我的项目目录下, 执行编译:

$ cargo build
   Compiling hello_cargo v0.1.0 (/Users/Herbert/rust/projects/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.21s

会将可执行程序生成在门路 target/debug/hello_cargo

首次应用命令 cargo build 构建的时候,它还会在我的项目根目录下创立一个名为 Cargo.lock 的新文件,这个文件记录了以后我的项目所有依赖库的具体版本号。

也能够简略地应用 cargo run 命令来顺次实现编译和运行工作:

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/hello_cargo`
Hello, world!

如果源代码并没有被批改,会间接运行了生成的二进制可执行文件。

编译查看

通过 cargo check 的命令,来疾速查看以后的代码是否能够通过编译,而不须要破费额定的工夫去真正生成可执行程序:

$ cargo check
    Checking hello_cargo v0.1.0 (/Users/Herbert/rust/projects/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.06s

cargo check 跳过了生成可执行程序的步骤。在编码的过程中须要一直通过编译器查看谬误,那么应用 cargo check 就会极大地减速通过编译的过程。

以 Release 模式进行构建

当筹备好公布本人的我的项目时,你能够应用命令 cargo build --release 在优化模式下构建并生成可执行程序:

$ cargo build --release
   Compiling hello_cargo v0.1.0 (/Users/Herbert/rust/projects/hello_cargo)
    Finished release [optimized] target(s) in 0.15s

生成的可执行文件会被搁置在 target/release 目录下。

这种模式会以更长的编译工夫为代价来优化代码,从而使代码领有更好的运行时性能。

依赖包治理

更新依赖

如果构建的程序依赖到第三方库,须要批改 Cargo.toml 增加依赖。比方程序引入了 rand 包,在 Cargo 生成的 [dependencies] 区域下方增加依赖:

[dependencies]
rand = "0.3.14"

这里的 [dependencies] 区域被用来申明我的项目中须要用到的全副依赖包及其版本号。咱们指定 rand 包版本号为 0.3.14,这里的数字 0.3.14 实际上是 ^0.3.14 的一个简写,它示意“任何与 0.3.14 版本公共 API 相兼容的版本”。

有了依赖后,Cargo 会从注册表(registry)中获取所有可用库的最新版本信息,而这些信息通常是从 crates.io 上复制过去的。它会在更新完注册表后开始逐条查看 [dependencies] 区域中的依赖,并下载以后缺失的依赖包。

Cargo.lock 文件锁

当第一次构建我的项目时,Cargo 会顺次遍历咱们申明的依赖及其对应的语义化版本,找到符合要求的具体版本号,并将它们写入 Cargo.lock 文件。

随后再次构建我的项目时,Cargo 就会优先检索 Cargo.lock,如果文件中存在曾经指明具体版本的依赖库,那么它就会跳过计算版本号的过程,并间接应用文件中指明的版本。

降级依赖包

Cargo 提供了一个专用命令:update,它会强制 Cargo 疏忽 Cargo.lock 文件,并从新计算出所有依赖包中合乎 Cargo.toml 申明的最新版本。如果运行胜利,Cargo 就会将更新后的版本号写入 Cargo.lock 文件,并笼罩之前的内容。

$ cargo update
    Updating registry `https://github.com/rust-lang/crates.io-index`
    Updating rand v0.3.14 -> v0.3.15

参考

  • Hello, Cargo!
退出移动版