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

举报
jcLee95 发表于 2023/06/15 00:17:24 2023/06/15
【摘要】 本文介绍 开发环境搭建与 rust 相关工具,如 rustc、cargo,详细讲解了这些工具地用法。
Rust 笔记
开发环境搭建与 rust 工具介绍


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





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

64位安装包
https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe

32位安装包

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.

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

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



在这里插入图片描述

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


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

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

在这里插入图片描述


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

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



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

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

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



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

rustup [OPTIONS] [+toolchain] <SUBCOMMAND>

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 打印此消息或给定子命令的帮助


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

在这里插入图片描述
你可以使用该网站查询你想要的 rust 包。


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

cargo [+toolchain] [OPTIONS] [COMMAND]

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的命令)


 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 选项

  • -v, --verbose 使用详细输出。对于包括额外输出(如依赖关系警告和构建脚本输出)的“very verbose(非常详细)”输出,可以指定两次。也可以用term.verbose配置值指定 https://doc.rust-lang.org/cargo/reference/config.html

  • -q, --quiet 不要打印 cargo 日志信息。也可以用term.quiet配置值指定。https://doc.rust-lang.org/cargo/reference/config.html

  • --color when 控制何时使用彩色输出。有效值:

    • 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一起使用。
  • --build-plan 向stdout输出一系列JSON消息,指示运行构建的命令。此选项不稳定,仅在nightly channel https://doc.rust-lang.org/book/appendix-07-nightly-rust.html 可用,并且需要-Z unstable-options标志才能启用。请参阅 https://github.com/rust-lang/cargo/issues/5579>了解更多信息。

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 选项

  • +toolchain 如果cargo已经安装了rustup,并且Cargo的第一个参数以+开头,它将被解释为rustup工具链名称(例如+stable或+nightly)。请参见 rustup 文档 https://rust-lang.github.io/rustup/overrides.html 获取有关工具链覆盖如何工作的更多信息。

  • --config KEY=VALUE or PATH 覆盖货物配置值。该参数应该采用 KEY=VALUE  TOML 语法,或者作为额外配置文件的路径提供。可以多次指定该标志。请参阅命令行覆盖部分https://doc.rust-lang.org/cargo/reference/config.html#command-line-overrides了解更多信息。

  • -C PATH

    • 在执行任何指定操作之前,更改当前工作目录。这将影响 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 显示在执行此命令期间产生的任何未来不兼容警告的未来不兼容报告。


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


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

rustc [OPTIONS] INPUT

该命令具有以下选项:

  • -h, --help 显示此消息
    • --cfg SPEC 配置编译环境
  • -L [KIND=]PATH 将目录添加到库搜索路径。可选类型可以是dependencycratenativeframework  all(默认)中的一种。
  • -l [KIND[:MODIFIERS]=]NAME[:RENAME] 将生成的 crate(s) 链接到指定的本地库名称。可选类型可以是 staticframework dylib(默认值)之一。可选的逗号分隔修饰符 (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 使用详细输出

其他帮助选项:

  • -C help 打印代码生成选项
  • -W help 打印“lint”选项和默认设置
  • --help -v 打印 rustc 接受的全套选项
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。