链接大型库时是否可以加速Rust编译?

时间:2018-03-12 13:41:36

标签: build compilation linker rust rust-cargo

在嵌入Servo作为二进制文件的一部分时,我经历了很长的连续构建时间。例如,使用此tutorial for embedding Servo,在初始构建完成后,对我的代码的任何修改都需要40s +来重建第4代四核i7上的二进制文件:

以下是Cargo的示例输出:

❯ cargo build
    Finished dev [unoptimized + debuginfo] target(s) in 0.1 secs

❯ touch src/main.rs
❯ cargo build
    Compiling servo-embedding-example v0.1.0
     Finished dev [unoptimized + debuginfo] target(s) in 57.9 secs

我正在运行一个最近的夜间工具链:

❯ rustc --version
rustc 1.25.0-nightly (15a1e2844 2018-01-20)
❯ cargo --version
cargo 0.26.0-nightly (6a8eb71f6 2018-01-13)

正在进行增量构建:

❯ echo $CARGO_INCREMENTAL
1

我不打算经常更新伺服,但我需要我的应用程序。有没有办法加快构建时间?

1 个答案:

答案 0 :(得分:6)

您可以做的一件事是将与Servo直接交互的代码与项目的其余部分分离到项目中自己的库中。

project-rs
├── Cargo.toml
├── src
│   ├── bin
│   │   └── main.rs
│   ├── this_needs_servo
│   │   └── Cargo.toml
│   │   └── lib.rs
│   └── ui
│       └── Cargo.toml
│       └── lib.rs
└── tests
    └── tests.rs

你会添加

[dependencies.this_needs_servo]
path = "src/this_needs_servo"

到项目根目录中的Cargo.toml,并将servo的依赖项移动到this_needs_servo lib下的Cargo.toml。

要使用此库,您可以将extern crate this_needs_servo;以及所有必需的use语句添加到您的主页。

现在servo只应在this_needs_servo lib中更改内容时进行编译。

相关问题