build - 链接大型库时是否可以加快 Rust 编译?

我在嵌入 Servo 时遇到了很长的连续构建时间作为我的二进制文件的一部分。例如,使用这个 tutorial for embedding Servo ,在初始构建完成后,对我的代码的任何修改都需要 40 秒以上才能在第四代四核 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

我不打算经常更新 Servo,但我的应用程序需要它。有什么方法可以加快构建时间?

最佳答案

您可以做的一件事是将直接与 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 库下的 Cargo.toml。

要使用这个库,您可以将 extern crate this_needs_servo; 以及所有必需的 use 语句添加到您的 main.rs。

现在 servo 应该只在您更改 this_needs_servo 库中的某些内容时编译。

https://stackoverflow.com/questions/49236704/

相关文章:

java - Intellij 在 jar 文件中包含 src 文件

java - 在 Java : Cannot find symbol 中使用 Kotlin 类

jenkins - 在 Jenkins 中,构建如何知道谁请求了它们?

r - R中 "Error: package ' ____ _' was built before

xcode - 构建静态库

xcode - 如何强制 xcode 在特定文件上使用 ARC?

scala - 更新后 Unresolved 依赖 SBT 0.13.0

c++ - 使用 Xcode 在 Mac 上构建 Boost

c++ - 使用 C++ 构建错误 - ‘find_if’ 不是 ‘std' 的成员

build - 如何在 Intellij IDEA 的构建路径中重新包含一个类?