Rust源码编译

Rust源码编译

rustc编译hello.rs

  • Rust程序源代码文件后缀名为.rs
  • 程序文件命名规范为小写字母加下划线,比如hello_world.rs
rust 复制代码
// hello.rs
fn main() {
    println!("hello world");
}
// fn 表示函数
// main 表示函数名,()内是参数
// {}内是函数体代码
// 代码以分号结束
// 程序代码缩进是4个空格
  • rustc hello.rs 执行后在当前目录生成hello可执行程序

cargo

cargo 是Rust的构建系统和包管理工具,能够构建项目代码、下载依赖库、构建库,在安装Rust时会自动安装cargo , 判断cargo 是否正确安装的方法就是在命令行中输入下述命令:

shell 复制代码
➜  hello_rust git:(master) ✗ cargo -V
cargo 1.71.1 (7f1d04c00 2023-07-29)
➜  hello_rust git:(master) ✗ cargo --version
cargo 1.71.1 (7f1d04c00 2023-07-29)

使用cargo创建项目

sh 复制代码
# cargo new 项目名称
cargo new hello_cargo
# 项目名称不能以数字开始
➜  hello_rust git:(master) ✗ cargo new 01-basic
error: the name `01-basic` cannot be used as a package name, the name cannot start with a digit
If you need a package name to not match the directory name, consider using --name flag.
If you need a binary with the name "01-basic", use a valid package name, and set the binary name to be different from the package. This can be done by setting the binary filename to `src/bin/01-basic.rs` or change the name in Cargo.toml with:

    [[bin]]
    name = "01-basic"
    path = "src/main.rs"
#  cargo new basic-01 创建项目成功
➜  02-cargo_build cargo new basic-01
     Created binary (application) `basic-01` package

cargo创建项目后,默认的文件目录结构:

shell 复制代码
basic-01 #[项目顶级目录]
|-- Cargo.toml
`-- src
    `-- main.rs

cargo build 构建项目

cargo build 命令自动进行编译项目,可执行程序名称和项目名称一致,basic-01

bash 复制代码
➜  basic-01 git:(master) ✗ cargo build
   Compiling basic-01 v0.1.0 (/root/rust/02-cargo_build/basic-01)
    Finished dev [unoptimized + debuginfo] target(s) in 0.29s
➜  basic-01 git:(master) ✗ ls
Cargo.lock  Cargo.toml  src  target
➜  basic-01 git:(master) ✗ tree target
target
|-- CACHEDIR.TAG
`-- debug
    |-- basic-01
    |-- basic-01.d
    |-- build
    |-- deps
    |   |-- basic_01-e75f9a220d3ad071
    |   `-- basic_01-e75f9a220d3ad071.d
    |-- examples
    `-- incremental
        `-- basic_01-2kh2yg4h6jcag
            |-- s-go2vdsztz6-al0tod-13wjiwhvtbk4c98mo163x460g
            |   |-- 1i85aafl0k1zfwu0.o
            |   |-- 1j4di08lgnzunw6s.o
            |   |-- 1kgk1cvp2qpwyh2b.o
            |   |-- 1nzi9licjx2a4suv.o
            |   |-- 3fohwnhiheayk2p7.o
            |   |-- 4tz67ju1du877p49.o
            |   |-- dep-graph.bin
            |   |-- query-cache.bin
            |   `-- work-products.bin
            `-- s-go2vdsztz6-al0tod.lock

cargo run 构建和运行项目

cargo run 命令是对代码进行编译和执行,将编译和执行这两步合成一步,如果项目之前编译成功过并且源代码没有变化,那么再次运行cargo run 命令时就会直接运行二进制文件,而不会重复进行编译。

cargo check

该命令可以用来检查代码,确保能够通过编译,但是不产生任何可执行文件,该命令比cargo build 命令快的多,在编写代码的时候可以连续反复的使用cargo check 检查代码提高开发效率。

构建Release版本

如果程序开发完成准备正式发布给用户时,就需要使用cargo build --release ,该命令会进行优化,优化后代码运行的更快,但是编译的时间更长。

使用该命令构建的可执行文件会在targe/release目录下,默认构建为debug。

相关推荐
IT_陈寒2 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
fliter3 小时前
最后一块拼图:用 bitvec 构造 IPv4 包,真正做出自己的 Ping
后端
fliter4 小时前
用 Rust 解析并生成 ICMP 包:checksum、nom 与 cookie-factory
后端
蝎子莱莱爱打怪4 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
fliter4 小时前
从 panic 到 Result:用 Rust 重新整理一个 ping 项目的错误处理
后端
森蓝情丶4 小时前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端
JensCS猿4 小时前
从 Spring Boot 回看 SSM 框架:手动挡与自动挡的驾驶哲学
后端
爱勇宝4 小时前
干了近 8 年,一夜之间被裁:AI 时代,程序员最该害怕的不是 AI
前端·后端·程序员
科米米5 小时前
嵌入式日志模块
后端
血小溅5 小时前
三大 AI 编码框架深度对比:GSD vs OpenSpec vs Superpowers
人工智能·后端