Rust 笔记开发环境搭建与 rust 工具介绍

简介: 本文记叙搭建 Rust 语言安装开发环境,及其相关工具知识的准备。

Rust 笔记开发环境搭建与 rust 工具介绍


作者李俊才 (jcLee95)https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343

邮箱 :291148484@163.com

本文地址


下一节:《 Rust 项目结构 与 第一个 Rust 项目

下一节:《 将 Rust 程序编译为 WebAssembly 的实践


【介绍】:本文记叙搭建 Rust 语言安装开发环境,及其相关工具知识的准备。

目 录



1. 搭建 rust 开发环境

1.1 安装 Rust

1.1.1 Linux 上安装 Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

1.1.2 Windows 上安装 Rust

64位安装包

https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe

32位安装包

https://static.rust-lang.org/rustup/dist/i686-pc-windows-msvc/rustup-init.exe

The Cargo home directory is located at:
  C:\Users\a2911\.cargo
This can be modified with the CARGO_HOME environment variable.
The cargo, rustc, rustup and other commands will be added to
Cargo's bin directory, located at:
  C:\Users\a2911\.cargo\bin
This path will then be added to your PATH environment variable by
modifying the HKEY_CURRENT_USER/Environment/PATH registry key.
You can uninstall at any time with rustup self uninstall and
these changes will be reverted.
Current installation options:
   default host triple: x86_64-pc-windows-msvc
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>

你可以选择 :

  • 1) Proceed with installation(继续安装)
  • Customize installation(自定义安装)
    这里我们选择 1:
>1

安装程序将边下载边安装:

info: profile set to 'default'
info: default host triple is x86_64-pc-windows-msvc
info: syncing channel updates for 'stable-x86_64-pc-windows-msvc'
info: latest update on 2023-04-20, rust version 1.69.0 (84c898d65 2023-04-16)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
 13.4 MiB /  13.4 MiB (100 %)   7.4 MiB/s in  2s ETA:  0s
info: downloading component 'rust-std'
 25.1 MiB /  25.1 MiB (100 %)  11.2 MiB/s in  2s ETA:  0s
info: downloading component 'rustc'
 58.9 MiB /  58.9 MiB (100 %)  10.2 MiB/s in  5s ETA:  0s
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 13.4 MiB /  13.4 MiB (100 %)   1.6 MiB/s in  6s ETA:  0s
info: installing component 'rust-std'
 25.1 MiB /  25.1 MiB (100 %)  13.2 MiB/s in  1s ETA:  0s
info: installing component 'rustc'
 58.9 MiB /  58.9 MiB (100 %)  14.5 MiB/s in  4s ETA:  0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable-x86_64-pc-windows-msvc'
  stable-x86_64-pc-windows-msvc installed - rustc 1.69.0 (84c898d65 2023-04-16)
Rust is installed now. Great!
To get started you may need to restart your current shell.
This would reload its PATH environment variable to include
Cargo's bin directory (%USERPROFILE%\.cargo\bin).
Press the Enter key to continue.

点击回车键继续,安装完成,程序退出。

希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流

1.2 安装 Rust 的 VSCode 插件

1.2.1 rust-analyzer 插件

这个扩展提供了对Rust编程语言的支持。推荐使用它,它将取代rust-lang.rust。你可以在以下地址找到它:

https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer

1.2.2 Better TOML 插件

nodeJS 项目直接使用 .json 后缀的文件用作配置(packages.json)不同,rust 语言的项目使用通过一款相对小众的文件格式,其文件后缀为.toml(TOML文件)。VSCode中本身并不支持 .toml 语法高亮,不过好在当然有第三方库—— Better TOML

Better TOML 是一款用于支持 TOML 文件的 VSCode 插件。我们可以直接在 VScode 中搜索安装:

1.3 关于 Rust 的更新

Rust 的更新非常频繁。如果你已经安装了Rustup,很可能你的Rust版本已经过时了。通过运行rustup update获得Rust的最新版本。

关于 rustup 工具,将在下一节更加详细地介绍。

2. Rust安装程序和版本管理工具: rustup

2.1 rustup 的安装位置

当安装 rust 的时候,rustup 自动地被安装。 对于 Windows 系统 一般而言,在你的用户主目录下,将由一个 .cargo 文件夹,其中的 bin 子目录存放的是 rust 的各个二进制可执行文件。

比如,我当前登陆的用户名位 a2911,对应的,我的用户主目录为C:\Users\a2911,而这些可执行文件就位于 C:\Users\a2911\.cargo\bin

如果你无法执行命令如 rustup 等命令(提示不能识别),则需要手动将该位置添加到系统的 path 环境变量中。

2.2 rustup 的用法

2.2.1 rustup 命令行语法格式

rustup.exe 提供以下命令语法格式

rustup [OPTIONS] [+toolchain] <SUBCOMMAND>

2.2.2 rustup 命令参数与选项解析

OPTIONS 表示选项,各个选项的 简写、全写、含义如下:

  • -v, --verbose 启用详细输出
  • -q, --quiet 禁用进度输出
  • -h, --help 打印帮助信息
  • -V, --version 打印版本信息

参数部分:

<+toolchain> 释放通道(例如 +stable)或自定义工具链以设置覆盖

SUBCOMMANDS 表示 子命令,包括:

  • show 显示活动的和已安装的工具链或profiles
  • update 更新Rust工具链和rustup
  • check 检查Rust toolchains和rustup的更新
  • default 设置默认工具链
  • toolchain 修改或查询已安装的工具链
  • target 修改工具链支持的目标
  • component 修改工具链的已安装组件
  • override 修改目录工具链覆盖
  • run 使用为给定工具链配置的环境运行命令
  • which 显示给定命令将运行哪个二进制文件
  • doc 打开当前工具链的文档
  • self 修改升级安装
  • set 更改升级设置
  • completions 为您的shell生成制表符结束脚本
  • help 打印此消息或给定子命令的帮助

3. Rust包管理器:cargo

3.1 cargo 是什么

除了上一节介绍的 rustup 工具外,还需要介绍一下 cargo 工具——他就相当于 npmnodeJS 一样,是 rust包的管理工具。当然,rust 官方有 与之对应的包注册官网:https://crates.io/

你可以使用该网站查询你想要的 rust 包。

3.2.1 cargo 命令行语法格式

rustup.exe 提供以下命令语法格式

cargo [+toolchain] [OPTIONS] [COMMAND]

3.2.2 cargo 命令参数与选项解析

1. 选项(Options):

cargo 命令具有以下选项:

  • -V,--version打印版本信息并退出
  • --list 列出已安装的命令
  • --explain <CODE> 运行 rustc --explain CODE
  • -v, --verbose… 使用详细输出(-vv very verbose/build.rs输出)
  • -q, --quiet 不要打cargo 物日志信息
    --color <WHEN> 着色: auto, always, never
  • -C <DIRECTORY>在做任何事情之前切换到目录 (nightly-only)
  • --frozen 要求 Cargo.lock 和 cache 是最新的
  • --locked 要求 Cargo.lock 是最新的
  • --offline 不访问网络运行
  • --config <KEY=VALUE> 覆盖配置值
  • -Z <FLAG> Cargo的不稳定(nightly-only)标志,详情见cargo -Z help
  • -h, --help 打印帮助信息

2. 命令(Commands):

  • build, b 编译当前包
  • check, c 分析当前包并报告错误,但不构建目标文件
  • clean 删除 target 目录
  • doc, d 构建此包及其依赖项的文档
  • new 创建新的 cargo 包
  • init 在现有目录中创建新的 cargo 包
  • add 向清单文件添加依赖项
  • remove 从清单文件中移除依赖项
  • run, r 运行本地包的二进制或示例
  • test, t 运行测试
  • bench 运行 benchmarks
  • update 更新 Cargo.lock 中列出的依赖项
  • search 搜索 crates 注册表
  • publish 打包并将此包上传到注册表
  • install 安装一个Rust二进制文件。默认位置是 $HOME/.cargo/bin
  • uninstall 卸载Rust二进制文件

注:

  • 一些常见的cargo命令有(参见所有带 --list的命令)

4. rust 项目构建与 rustc 工具(rust 语言的编译器)

4.1 cargo build 命令

Cargo 小节没有详细介绍过其子命令,其中就有一个 build 子命令,其功能是 编译本地包及其所有依赖项,其语法格式为:

cargo build [options]

其中 options 表示选项:

Package选择 选项

默认情况下,当没有给出包选择选项时,所选择的包取决于所选择的清单文件(如果没有给出 --manifest-path,则基于当前工作目录)。如果清单是工作区的根,则选择工作区的默认成员,否则只选择清单定义的包。

可以使用根清单中的workspace.default-members键显式设置工作区的默认成员。如果没有设置,虚拟工作空间将包括所有的工作空间成员(相当于传入选项 --workspace),而非虚拟工作空间将只包括root crate本身。

  • -p spec…, --package spec… 仅构建指定的包。该标志可以多次指定,并支持常见的Unix全局模式,如*?[]。然而,为了避免您的shell在Cargo处理glob模式之前意外扩展它们,您必须在每个模式周围使用单引号或双引号。
  • --workspace 构建工作区中的所有成员。
  • --all 不推荐使用 --workspace
  • --exclude SPEC… 排除指定的包。必须与 --workspace 标志一起使用。该标志可以多次指定,并支持常见的Unix全局模式,如*?[]。然而,为了避免您的shell在Cargo处理glob模式之前意外扩展它们,您必须在每个模式周围使用单引号或双引号。

Target选择 选项

当没有给出目标选择选项时,cargo build将构建所选包的所有二进制和库目标。如果二进制文件缺少必需的特性,它们将被跳过。如果选择了要构建的集成测试或基准,那么二进制目标会自动构建。这允许集成测试执行二进制代码来测试它的行为。构建集成测试时会设置 CARGO_BIN_EXE_<name> 环境变量 <https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-crates> 以便它可以使用env宏 <https://doc.rust-lang.org/std/macro.env.html> 来定位可执行文件。传递目标选择标志将只构建指定的目标。注意 --bin--example--test--bench 标志也支持常见的Unix全局模式,如*?[]。然而,为了避免 shell 在 Cargo 处理 glob模式 之前意外地扩展它们,您必须在每个 glob模式 周围使用单引号或双引号。

  • --lib 构建包的库。
  • --bin name… 构建指定的二进制文件。该标志可以多次指定,并支持常见的Unix glob模式。
  • --bins 构建所有二进制目标。
  • --example name… 构建指定的示例。该标志可以多次指定,并支持常见的Unix glob模式。
  • --examples 构建所有示例目标。
  • --test name… 生成指定的集成测试。该标志可以多次指定,并支持常见的Unix glob模式。
  • --tests 在测试模式下构建所有设置了 test = true清单标志的目标。默认情况下,这包括作为单元测试和集成测试构建的库和二进制文件。请注意,这也将构建任何所需的依赖项,因此lib目标可以构建两次(一次作为单元测试,一次作为二进制文件、集成测试等的依赖项。).可以通过在目标的清单设置中设置测试标志来启用或禁用目标。
  • --bench name… 构建指定的benchmark(基准)。该标志可以多次指定,并支持常见的Unix glob模式。
  • --benches 在基准模式下构建所有设置了 bench = true 清单标志的目标。默认情况下,这包括作为基准构建的库和二进制文件,以及基准目标。请注意,这也将构建任何所需的依赖项,因此lib目标可能会构建两次(一次作为基准,一次作为二进制文件、基准等的依赖项。).可以通过在目标的清单设置中设置bench标志来启用或禁用目标。
  • --all-targets 构建所有目标。这相当于指定 --lib--bins--tests--benches--examples

Feature选择 选项

功能标志( Feature Flag)允许您控制启用哪些功能。如果没有给定功能选项,则为每个选定的软件包激活默认功能。

请参见功能文档 https://doc.rust-lang.org/cargo/reference/features.html#command-line-feature-options 了解更多详情。

  • -F features, --features features 要激活的以空格或逗号分隔的功能列表。工作空间成员的功能可以用 package-name/feature-name 语法来启用。可以多次指定该标志,从而启用所有指定的功能。
  • --all-features 激活所有选定软件包的所有可用功能。
  • --no-default-features 不要激活所选软件包的默认功能。

Compilation 选项

  • --target triple 为给定的体系结构构建。默认为主机架构。三元组的一般格式是<arch><sub>-<vendor>-<sys>-<abi>。 运行 rustc --print target-list以获取受支持目标的列表。可以多次指定该标志。
    这也可以用 build.target 配置值 https://doc.rust-lang.org/cargo/reference/config.html 来指定。
    注意,指定这个标志会使Cargo以不同的模式运行,其中目标工件被放在一个单独的目录中。有关更多详细信息,请参见构建缓存 https://doc.rust-lang.org/cargo/guide/build-cache.html 文档了解更多细节。
  • -r, --release 使用发布profile文件构建优化的工件。另请参见 --profile 选项,通过名称选择特定的配置文件。
  • --profile name 用给定的profile文件构建。请参阅参考文件 https://doc.rust-lang.org/cargo/reference/profiles.html 以了解有关配置文件的更多详细信息。
  • --ignore-rust-version 构建目标,即使所选Rust编译器比项目的 rust-version` 字段中配置的所需Rust版本旧。
  • --timings=fmts输出每次编译需要多长时间的信息,并随着时间的推移跟踪并发信息。接受可选的逗号分隔的输出格式列表;不带参数的计时将默认为--timings=html.。指定输出格式(而不是默认格式)是不稳定的,需要-Zunstable-options。有效的输出格式:
  • html (不稳定,需要 -Zunstable-options):将一个人类可读的文件cargo-timing.html写入target/cargo-timings目录,并附上编译报告。如果您想查看以前的运行,也可以在相同的目录下写一个带有时间戳的报告。HTML输出只适合人类使用,不提供机器可读的计时数据。
  • json(不稳定,需要 -Zunstable-options):发出关于计时信息的机器可读JSON信息。

Output 选项

Display 选项

  • auto (默认):自动检测终端是否支持颜色。
  • always:始终显示颜色。
  • never:从不显示颜色。

也可以用term.color配置值指定。 https://doc.rust-lang.org/cargo/reference/config.html

  • --message-format fmt诊断消息的输出格式。可以多次指定,由逗号分隔的值组成。有效值:
  • human (默认): 以人类可读的文本格式显示。与short和json冲突。
  • short: 发出更短的、人类可读的文本消息。与human和json的冲突。
  • json: 向stdout发出JSON消息。详情见参考https://doc.rust-lang.org/cargo/reference/external-tools.html#json-messages。与人类的冲突和短暂。
  • json-diagnostic-short: 确保JSON消息的呈现字段包含来自rustc的“简短”呈现。不能与human或short一起使用。
  • json-diagnostic-rendered-ansi: 确保JSON消息的呈现字段包含嵌入的ANSI颜色代码,以符合rustc的默认颜色方案。不能与human或short一起使用。
  • json-render-diagnostics: 指示Cargo不要在打印的JSON消息中包含rustc诊断,而是Cargo本身应该呈现来自rustc的JSON诊断。Cargo自己的JSON诊断和来自rustc的其他诊断仍然会发出。不能与human或short一起使用。

Manifest 选项

  • --manifest-path path Cargo.toml文件的路径。默认情况下,Cargo在当前目录或任何父目录中搜索Cargo.toml文件。
  • --frozen, --locked 这两个标志都要求Cargo.lock文件是最新的。如果锁文件丢失,或者需要更新,Cargo将出错退出。冻结标志还防止货物试图访问网络来确定它是否过期。
    在希望断言 Cargo.lock文件是最新的(例如CI构建)或希望避免网络访问的环境中,可以使用这些文件。
  • --offline 防止货物以任何理由访问网络。如果没有这个标志,当Cargo需要访问网络而网络不可用时,Cargo将出错停止。有了这个标志,如果可能的话,货物将试图在没有网络的情况下前进。
    请注意,这可能会导致与在线模式不同的依赖关系解析。Cargo将自己限制在本地下载的板条箱中,即使在索引的本地副本中可能有更新的版本。请参阅cargo-fetch(1)命令,以便在脱机之前下载依赖项。

也可以用net.offline配置值来指定。https://doc.rust-lang.org/cargo/reference/config.html

Common 选项

  • 在执行任何指定操作之前,更改当前工作目录。这将影响 cargo 在默认情况下在哪里查找项目清单(Cargo.toml),以及为了发现而搜索的目录。比如 cargo/config.toml
  • 此选项仅在 nightly channel 和 上可用,并且需要-Z不稳定选项标志才能启用 (见 https://github.com/rust-lang/cargo/issues/10098)。
  • -h, --help 打印帮助信息。
  • -Z flag Cargo不稳定 (nightly-only) 标志。运行cargo -Z help获取详细信息。

Miscellaneous 选项

  • -j N, --jobs N 要运行的并行作业的数量。也可以用build.jobs配置值指定 https://doc.rust-lang.org/cargo/reference/config.html。 默认为逻辑CPU的数量。如果为负,它将并行作业的最大数量设置为逻辑CPU的数量加上提供的值。不应为0。
  • --keep-going 在依赖图中构建尽可能多的crates ,而不是在第一个构建失败时中止构建。不稳定,需要 ·-Zunstable-options·。
  • --future-incompat-report 显示在执行此命令期间产生的任何未来不兼容警告的未来不兼容报告。

4.2 Rust 语言的编译器: rustc 工具

另外一个重要的工具就是 rustc 了,它是 Rust 语言的编译器。不过大多数Rust程序员不直接调用 rustc,而是通过Cargo命令来实现——只是需要指出,这背后都是为rustc 服务的!

4.2.1 rustc 命令行语法格式

rustup.exe 提供以下命令语法格式

rustc [OPTIONS] INPUT

4.2.2 rustc 命令参数与选项解析

该命令具有以下选项:

  • -h,--help显示此消息
  • --cfg SPEC 配置编译环境
  • -L [KIND=]PATH 将目录添加到库搜索路径。可选类型可以是dependencycratenativeframeworkall(默认)中的一种。
  • -l [KIND[:MODIFIERS]=]NAME[:RENAME]将生成的 crate(s) 链接到指定的本地库名称。可选类型可以是staticframeworkdylib(默认值)之一。可选的逗号分隔修饰符 (bundle|verbatim|whole-archive|as-needed) 可以用前缀+来指定,以启用或-来禁用。
  • --crate-type [bin|lib|rlib|dylib|cdylib|staticlib|proc-macro] 编译器要发出的以逗号分隔的 crates 类型列表
  • --crate-name NAME 指定正在构建的 crate 的名称
  • --edition 2015|2018|2021|2024 指定编译代码时要使用的编译器版本。默认为2015年,最新稳定版为2021年。
  • --emit [asm|llvm-bc|llvm-ir|obj|metadata|link|dep-info|mir] 编译器要发出的输出类型的逗号分隔列表
  • --print [crate-name|file-names|sysroot|target-libdir|cfg|calling-conventions|target-list|target-cpus|target-features|relocation-models|code-models|tls-models|target-spec-json|native-static-libs|stack-protector-strategies|link-args] 要在stdout上打印的编译器信息
  • -g 相当于 -C debuginfo=2
  • -O 相当于 -C opt-level=2
  • -o FILENAME将输出写入
  • --out-dir DIR 将输出写入编译器在中选择的文件名
  • --explain OPT 提供错误消息的详细解释
  • --test 构建测试工具
  • --target TARGET 为其编译代码的目标三元组
  • -A, --allow LINT 设置 lint 允许
  • -W, --warn LINT 设置 lint 警告信息
    --force-warn LINT 设置 lint 强制警告
  • -D, --deny LINT 设置lint拒绝
  • -F,--forbid LINT禁止lint设置
  • --cap-lints LEVEL 设置最严格的lint 等级。更具限制性的lints被限制在这一级别
  • -C, --codegen OPT[=VALUE] 设置codegen选项
  • -V, --version 打印版本信息并退出
  • -v, --verbose 使用详细输出

其他帮助选项:

  • -Chelp 打印代码生成选项
  • -Whelp 打印“lint”选项和默认设置
  • --help-v 打印 rustc 接受的全套选项
目录
相关文章
|
3月前
|
Rust 数据可视化 安全
Rust性能分析工具概览:perf、flamegraph 与其他
Rust作为一种高性能、内存安全的编程语言,在构建大型系统和微服务时备受青睐。然而,优化Rust程序的性能需要有效的工具。本文将对Rust中常用的性能分析工具进行介绍,包括perf、flamegraph等,并探讨它们如何帮助开发者定位和解决性能瓶颈。
|
4月前
|
Rust 安全 网络协议
Rust 笔记:Rust 语言中的枚举 与 模式匹配
Rust 笔记:Rust 语言中的枚举 与 模式匹配
48 0
|
4月前
|
存储 Rust 安全
Rust 笔记:Rust 语言中的 所有权 与 生命周期
Rust 笔记:Rust 语言中的 所有权 与 生命周期
135 0
|
3月前
|
Rust 编译器 Linux
Rust编译过程讲解与开发环境准备
目前主流编译平台有,GNU、MSVC、LLVM。因为rustc调用了llvm,因此我们以LLVM为例,我们从C语言的编译过程聊,再对比Rust,看它们的编译过程有何差异。
161 3
|
4月前
|
存储 缓存 Rust
Rust 笔记:Rust 语言中哈希结构(哈希映射,HashMap)、集合(哈希集,HashSet)及其使用
Rust 笔记:Rust 语言中哈希结构(哈希映射,HashMap)、集合(哈希集,HashSet)及其使用
364 0
|
4月前
|
存储 Rust 安全
Rust 笔记:Rust 语言中的 结构体 与面向对象编程的实现
Rust 笔记:Rust 语言中的 结构体 与面向对象编程的实现
78 0
|
4月前
|
存储 Rust 索引
Rust 笔记:Rust 语言中的运算符
Rust 笔记:Rust 语言中的运算符
124 0
|
4月前
|
存储 设计模式 人工智能
Rust 笔记:有限状态机原理/状态模式 及其 在Rust 编程中的应用
Rust 笔记:有限状态机原理/状态模式 及其 在Rust 编程中的应用
121 0
|
4月前
|
Web App开发 Rust JavaScript
Rust 笔记:WebAssembly 的 JavaScript API
Rust 笔记:WebAssembly 的 JavaScript API
93 0
|
4月前
|
存储 Rust 编译器
Rust 笔记:Rust 语言中的常量与变量
Rust 笔记:Rust 语言中的常量与变量
51 0