如果“货物构建”比直接运行rustc慢,我为什么要使用Cargo?

时间:2017-06-11 12:15:45

标签: rust rust-cargo

我创建了一个简单的hello world程序:

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

使用rustc vs cargo build编译代码时,cargo命令显示较慢。对于cargo buildrustc 1s 需要 1.6s 。请参阅屏幕截图右侧的时间戳。

这是为什么?我为什么还要用货?

1 个答案:

答案 0 :(得分:16)

作为Pavel Strakhov said

  

货物不是编译器,它是包管理器。它运行rustc并执行一些额外的工作(例如,解析依赖项),因此它不会比裸rustc更快。

您可以通过运行cargo build --verbose来自行查看,这会输出货物运行的rustc命令:

$ cargo build --verbose
   Compiling hw v0.1.0 (file:///private/tmp/hw)
     Running `rustc --crate-name hw src/main.rs --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=3c693c67d55ff970 -C extra-filename=-3c693c67d55ff970 --out-dir /private/tmp/hw/target/debug/deps -L dependency=/private/tmp/hw/target/debug/deps`
    Finished dev [unoptimized + debuginfo] target(s) in 0.30 secs
  

为什么我还要使用货物

上面的输出显示了一个原因:查看传递给rustc的所有参数。你知道他们每个人做了什么吗?你想要知道吗? Cargo将一些细节抽象出来,让您专注于代码。

Cargo除了调用编译器之外还做了很多其他事情。对大多数人来说,最大的好处是它manages your dependencies based on versions并允许publishing your own crates as well。它还允许在主编译之前运行的build scripts。它有简单的running your tests方式和例子。

更直接有用,Cargo执行检查以查看是否应该重建

$ time rustc src/main.rs
0:00.21
$ time rustc src/main.rs
0:00.22

$ time cargo build
0:00.41
$ time cargo build
0:00.09                   # Much better!