什么是 rustc?

欢迎来到“rustc 书籍”! rustc 是 Rust 编程语言的编译器,由该项目本身提供。编译器接收您的源代码并生成二进制代码,可以是库或可执行文件。

大多数 Rust 程序员不会直接调用 rustc,而是通过 Cargo 来完成。但这都是为了 rustc 服务!如果您想查看 Cargo 如何调用 rustc,您可以

$ cargo build --verbose

它将打印出每次 rustc 调用。本书可以帮助您理解每个选项的作用。此外,虽然大多数 Rustacean 使用 Cargo,但并非所有人都这样做:有时他们会将 rustc 集成到其他构建系统中。本书应该为所有您需要这样做的选项提供指南。

基本用法

假设您在 hello.rs 文件中有一个简单的 hello world 程序

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

要将此源代码转换为可执行文件,您可以使用 rustc

$ rustc hello.rs
$ ./hello # on a *NIX
$ .\hello.exe # on Windows

请注意,我们只向 rustc 传递crate 根目录,而不是我们希望编译的每个文件。例如,如果我们有一个 main.rs 文件,如下所示

mod foo;

fn main() {
    foo::hello();
}

以及一个包含以下内容的 foo.rs 文件

pub fn hello() {
    println!("Hello, world!");
}

要编译它,我们将运行以下命令

$ rustc main.rs

无需告诉 rustc 关于 foo.rs 的信息;mod 语句提供了它需要的一切。这与您使用 C 编译器的方式不同,在 C 编译器中,您需要在每个文件上调用编译器,然后将所有内容链接在一起。换句话说,crate 是一个翻译单元,而不是一个特定的模块。