rust abc(1): 最小环境搭建

news/2024/11/7 14:34:59/

文章目录

    • 1. 目的
    • 2. 命令集合
    • 3. 安装或更新 rust
      • 3.1 命令
      • 3.2 运行结果
    • 4. 包管理工具 Cargo
    • 5. 创建 Rust 的 Hello World 程序: 单个文件
    • 6. 创建 Rust 的 Hello World 工程: 基于 Cargo
      • 6.1 cargo new 创建工程
      • 6.2 cargo run
      • 6.3 完整输出
      • 6.4 解释
    • 7. IDE/编辑器
    • 8. References

在这里插入图片描述

1. 目的

安装 rust 语言需要的开发环境, 包括必要的工具链, 以及可选的 IDE/编辑器.

2. 命令集合

  • rustc: rust 编译器, 用来编译 .rs 后缀的文件
  • rustup: rust 工具链安装程序(命令行), 用来安装、更新 rustc、cargo 以及编译工具链,比如交叉编译的工具链
  • cargo: rust 的工程管理工具, 它自称为“rust 包管理器”,但其实还肩负着每个工程的构建、清理等任务

3. 安装或更新 rust

3.1 命令

第一次安装:

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

安装了好久,rust 都 rust 了(rust 本意是铁锈),还没有开启学习 rust 的你,请务必更新 rust 到最新:

rustup update

查看 rust 版本:

rustc -V

3.2 运行结果

我是在 Ubuntu 22.04 下运行的。今天是 2023年06月24日。 rust 更新后是 1.70.0 版本:

zz@Legion-R7000P% rustup update
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
732.1 KiB / 732.1 KiB (100 %) 175.4 KiB/s in  2s ETA:  0s
info: latest update on 2023-06-01, rust version 1.70.0 (90c541806 2023-05-31)
info: downloading component 'rust-src'2.3 MiB /   2.3 MiB (100 %)   1.7 MiB/s in  1s ETA:  0s
info: downloading component 'cargo'6.9 MiB /   6.9 MiB (100 %)   2.4 MiB/s in  3s ETA:  0s
info: downloading component 'clippy'
info: downloading component 'rust-docs'13.5 MiB /  13.5 MiB (100 %)   3.7 MiB/s in  4s ETA:  0s
info: downloading component 'rust-std'27.3 MiB /  27.3 MiB (100 %)   4.6 MiB/s in  6s ETA:  0s
info: downloading component 'rustc'64.3 MiB /  64.3 MiB (100 %)   4.2 MiB/s in 15s ETA:  0s
info: downloading component 'rustfmt'
info: removing previous version of component 'rust-src'
info: removing previous version of component 'cargo'
info: removing previous version of component 'clippy'
info: removing previous version of component 'rust-docs'
info: removing previous version of component 'rust-std'
info: removing previous version of component 'rustc'
info: removing previous version of component 'rustfmt'
info: installing component 'rust-src'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
info: installing component 'rust-std'27.3 MiB /  27.3 MiB (100 %)  19.6 MiB/s in  1s ETA:  0s
info: installing component 'rustc'64.3 MiB /  64.3 MiB (100 %)  21.1 MiB/s in  3s ETA:  0s
info: installing component 'rustfmt'
info: checking for self-updatestable-x86_64-unknown-linux-gnu updated - rustc 1.70.0 (90c541806 2023-05-31) (from rustc 1.69.0 (84c898d65 2023-04-16))info: cleaning up downloads & tmp directories
zz@Legion-R7000P% rustc -V
rustc 1.70.0 (90c541806 2023-05-31)

4. 包管理工具 Cargo

cargo 是一个命令行工具, 安装 rust 后自带的。当前 (2023-06-24 19:27:29) cargo 版本也是 1.70.0。

zz@Legion-R7000P% cargo -V
cargo 1.70.0 (ec8a8a0ca 2023-04-25)
zz@Legion-R7000P% rustc -V
rustc 1.70.0 (90c541806 2023-05-31)

5. 创建 Rust 的 Hello World 程序: 单个文件

最简单的额 rust 程序, 只有一个 .rs 文件, 不需要让 cargo 来下掺和。

hello.rs:

fn main()
{println!("Hello, World!");
}

编译和运行:

rustc hello.rs
./hello

输出:

zz@Legion-R7000P% rustc hello.rs
zz@Legion-R7000P% ./hello
Hello, World!
zz@Legion-R7000P% ls
hello  hello.rs

6. 创建 Rust 的 Hello World 工程: 基于 Cargo

6.1 cargo new 创建工程

既然 Rust 官方让我们用 Cargo, 那就试用一下:

zz@Legion-R7000P% ls
hello  hello.rs
zz@Legion-R7000P% pwd
/home/zz/work/rust_abc
zz@Legion-R7000P% cargo new hello-rustCreated binary (application) `hello-rust` package
zz@Legion-R7000P% tree -L 3
.
├── hello
├── hello.rs
└── hello-rust├── Cargo.toml└── src└── main.rs2 directories, 4 files

在这里插入图片描述

其中:

  • Cargo.toml 是 manifest 文件,保存了工程的 metadata 和依赖项
[package]
name = "hello-rust"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]
  • src/main.rs 是主代码
fn main() {println!("Hello, world!");
}

6.2 cargo run

我们像小白鼠一样,按官方文档直接操作。刚才已经执行过了

cargo new hello-rust

现在执行

cargo run

发现报错了:

error: could not find Cargo.toml in /home/zz/work/rust_abc or any parent directory

嗯,官方教程1 也写的挺不仔细的, 少一个切换路径的操作:

cd hello-rust  # 进入到我们刚才创建的工程目录中

然后才是运行:

cargo run

就看到了想要的输出:

zz@Legion-R7000P% cargo run
Compiling hello-rust v0.1.0 (/home/zz/work/rust_abc/hello-rust)
Finished dev [unoptimized + debuginfo] target(s) in 0.19s
Running target/debug/hello-rust
Hello, world!

6.3 完整输出

zz@Legion-R7000P% cargo run
error: could not find `Cargo.toml` in `/home/zz/work/rust_abc` or any parent directory
zz@Legion-R7000P% cargo run hello-rust
error: could not find `Cargo.toml` in `/home/zz/work/rust_abc` or any parent directory
zz@Legion-R7000P% cd hello-rust
zz@Legion-R7000P% cargo runCompiling hello-rust v0.1.0 (/home/zz/work/rust_abc/hello-rust)Finished dev [unoptimized + debuginfo] target(s) in 0.19sRunning `target/debug/hello-rust`
Hello, world!

6.4 解释

cargo run 干了很多事情:

  • 编译, 得到了 target/debug/hello-rust 文件
  • 运行,运行的是 target/debug/hello-rust, 输出了 “Hello, world!”
  • 还有一些其他杂七杂八的文件
zz@Legion-R7000P% pwd
/home/zz/work/rust_abc/hello-rust
zz@Legion-R7000P% tree -L 4
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target├── CACHEDIR.TAG└── debug├── build├── deps│   ├── hello_rust-741c35951fb72cce│   └── hello_rust-741c35951fb72cce.d├── examples├── hello-rust├── hello-rust.d└── incremental└── hello_rust-3g41msry4z82l8 directories, 8 files

在这里插入图片描述

7. IDE/编辑器

IDE/编辑器在初学 rust 阶段是最不重要的事情。在这个阶段, 用 记事本/Vim 就可以完成 rust 代码的编写和运行。vim 也是没有安装任何插件的 vim, 只是开启了语法高亮:

~/.vimrc:

" let vim set indentation according to file type
if has('autocmd')filetype plugin indent on
endif

使用的操作系统是 Ubuntu 22.04, KDE 桌面。

8. References


  1. https://www.rust-lang.org/learn/get-started ↩︎


http://www.ppmy.cn/news/553491.html

相关文章

悄悄关注 (25分)

题目描述 新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒…

7-5 悄悄关注

悄悄关注 新浪微博上有个“悄悄关注”,某人人悄悄关注的人,不出现在某人人的关注列表上,但系统会推送其悄悄关注的人发表的微博给某人人。现在我们来做一回网络侦探,根据某人人的关注列表和其对其他用户的点赞情况,扒…

L2-019 悄悄关注

新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒出有可能…

7-5 悄悄关注 (25 分)

新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒出有可能…

Redis实现微博好友功能微服务(关注,取关,共同关注)

需求分析 好友功能是目前社交场景的必备功能之一,一般好友相关的功能包含有:关注/取关、我(他)的关注、我(他)的粉丝、共同关注、我关注的人也关注他等这样一些功能。 类似于这样的功能我们如果采用数据库…

7-7 悄悄关注 (25分)

7-7 悄悄关注 (25分) 新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况&…

我的关注

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰…

7-20 悄悄关注 (25 分)

新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒出有可能…