< 返回版块

2019-04-02 13:52    责任编辑:Mike

Cargo

cargo 是 Rust 官方的包管理工具,在整个 Rust 生态中处于基础设施地位,非常重要。Cargo 本身的设计非常优秀,对库、版本依赖的解析简洁而清晰。在 Cargo 的支持下,一个工程可以依赖于同一个库的不同版本(即多个不同版本可以共存)。虽然并不推荐这样,但在现实世界快速迭代的过程中,这是不可避免的现象。

官方有 cargo book 详细教程。点击阅读

cargo 的子命令

cargo 有很多子命令,每个子命令执行不同的操作。下面依次罗列并解释:

  • bench - 运行性能评测代码
  • build - 构建当前包
  • check - 检查当前包(只做基本编译检查,不走完整个编译流程)
  • clean - 清除编译过程中产生的目标文件夹
  • doc - 构建包文档(也会构建对应的依赖包的文档,文档是可跳转的)
  • fetch - 从网络获取包的依赖
  • fix - 自动修复 rustc 报出的警告(也可用于版本间的代码更新)
  • run - 运行当前包
  • rustc - 编译当前包,并给编译器传入一些额外的参数(用于自定义编译参数)
  • rustdoc - 使用指定的自定义标志构建包文档
  • test - 执行当前包中的单元测试和集成测试
  • generate-lockfile - 为当前包产生锁文件(Cargo.lock)
  • locate-project - 打印 Cargo.toml 文件的位置路径
  • metadata - 输出当前包的元数据,以 JSON 形式
  • pkgid - 打印一个完整的包规格说明
  • update - 更新依赖,并更新锁文件 Cargo.lock
  • verify-project - 检查包说明文件的正确性
  • init - 在已经存在的目录中创建一个新的 Cargo 包
  • install - 构建和安装一个 Rust 库(或二进制文件)
  • new - 创建一个新的 Cargo 包
  • search - 在 crates.io 搜寻包
  • uninstall - 删除一个包
  • login - 将一个合法的 API 令牌保存到本地,以供后面认证之用
  • owner - 管理注册表中的包的所有者
  • package - 把本地的编译过的包打包成可以发布的包
  • publish - 把包上传并发布到仓库
  • yank - 从仓库中弃除一个包的之前的版本
  • help - 获得一个 cargo 命令的帮助文档
  • version - 显示 cargo 的版本信息

cargo 的插件

cargo 作为一个基础工具,有一套插件机制。现在社区中已经开发了很多插件了,现在在这里汇总一下(不完全):

  • flamegraph Easy flamegraphs for Rust projects and everything else, without Perl or pipes <3
  • cargo-edit A utility for managing cargo dependencies from the command line.
  • cargo-web A Cargo subcommand for the client-side Web
  • cargo-watch Watches over your Cargo project's source
  • cargo-tarpaulin A code coverage tool for Rust projects
  • cargo-bloat Find out what takes most of the space in your executable.
  • cargo-fuzz Command line helpers for fuzzing
  • cargo-src Semantic code navigation for Rust
  • cargo-asm cargo subcommand showing the assembly or llvm-ir generated for Rust code
  • cargo-script cargo-script is a Cargo subcommand designed to let people quickly and easily run Rust "scripts" which can make use of Cargo's package ecosystem. It can also evaluate expressions and run filters.
  • cargo-outdated A cargo subcommand for displaying when Rust dependencies are out of date
  • cargo-expand Subcommand to show result of macro expansion
  • cargo-deb A cargo subcommand that generates Debian packages from information in Cargo.toml
  • cargo-tree cargo tree is a Cargo subcommand that visualizes a crate's dependency graph in a tree-like format.
  • cargo-make Rust task runner and build tool.
  • cargo-audit Audit Cargo.lock files for crates with security vulnerabilities
  • cargo-update A cargo subcommand for checking and applying updates to installed executables
  • cargo-vendor Cargo subcommand to vendor crates.io dependencies
  • cargo-generate cargo, make me a project
  • cargo-release Cargo subcommand "release": everything about releasing a rust crate.
  • cargo-profiler cargo subcommand to profile binaries
  • cargo-geiger Detects usage of unsafe Rust in a Rust crate and its dependencies.
  • rust-skeptic Test your Rust Markdown documentation via Cargo
  • cargo-call-stack Whole program static stack analysis
  • cargo-inspect Pssst!... see what Rust is doing behind the curtains 🕵🤫
  • cargo-benchcmp A small utility to compare Rust micro-benchmarks.
  • cargo-graph A cargo subcommand for creating GraphViz DOT files and dependency graphs
  • cargo-modules A cargo plugin for showing a tree-like overview of a crate's modules.
  • cargo-lipo Cargo subcommand to automatically create universal libraries for iOS.
  • cargo-thanks Give thanks to your fellow Rustaceans
  • cargo-instruments A cargo plugin to generate Xcode Instruments trace files

其它相关工具

  • xargo The sysroot manager that lets you build and customize std
  • wargo Easy Rust to WebAssembly

crates.io

crates.io 是 Rust 官方默认的仓库,其与 Cargo 高度集成,cargo 的命令可以直接将本地打包好的 crate 一键发布到 crates.io 上。估整个社区使用。

有时 crates.io 会上不了,这时请参考 crates.io 国内镜像