什么是 rustc?
欢迎阅读“rustc 之书”!rustc
是 Rust 编程语言的编译器,由项目本身提供。编译器获取你的源代码并生成二进制代码,可以是库或可执行文件。
大多数 Rust 程序员不直接调用 rustc
,而是通过Cargo来调用。不过,这一切都是为了服务 rustc
!如果你想看看 Cargo 是如何调用 rustc
的,你可以
$ cargo build --verbose
它将打印出每次 rustc
的调用命令。本书可以帮助你理解这些选项的作用。此外,虽然大多数 Rust 用户使用 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 是一个翻译单元(translation unit),而不是一个特定的模块(module)。