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

tna*_*dek 17 linker compilation build rust rust-cargo

Servo作为二进制文件的一部分嵌入时,我遇到了很长的连续构建时间.例如,使用本教程嵌入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
Run Code Online (Sandbox Code Playgroud)

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

? rustc --version
rustc 1.25.0-nightly (15a1e2844 2018-01-20)
? cargo --version
cargo 0.26.0-nightly (6a8eb71f6 2018-01-13)
Run Code Online (Sandbox Code Playgroud)

增量构建正在进行:

? echo $CARGO_INCREMENTAL
1
Run Code Online (Sandbox Code Playgroud)

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

小智 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
Run Code Online (Sandbox Code Playgroud)

你会添加

[dependencies.this_needs_servo]
path = "src/this_needs_servo"
Run Code Online (Sandbox Code Playgroud)

到项目根目录中servo的Cargo.toml 并将依赖项移动到this_needs_servolib 下的Cargo.toml中.

要使用此库,您可以向main.rs 添加extern crate this_needs_servo;所有必需的use语句.

现在servo应该只在你改变this_needs_servolib 中的内容时编译.

  • 这似乎不会回答问题,因为它要求修复*链接时间*,这不会随着此解决方案而改变. (4认同)