链接大型库时,是否有可能加快Rust编译速度?

18

Servo 嵌入我的二进制文件时,我遇到了长时间的连续构建时间。例如,按照这个 嵌入 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,但我的应用程序需要它。 有没有什么方法可以加快构建时间?


货物是否作为静态库嵌入?如果是这样,在调试时将其作为动态库嵌入是否能加快链接时间? - Matthieu M.
1个回答

7

你可以做的一件事是将直接与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"

servo 的依赖项移动到位于项目根目录的 Cargo.toml 下的 this_needs_servo 库中。使用此库时,您可以将 extern crate this_needs_servo; 和所有必需的 use 语句添加到 main.rs 中。现在,只有在更改 this_needs_servo 库中的内容时才会编译 servo

4
这似乎不能回答问题,因为它询问如何修复“链接时间”,而这个解决方案不会改变链接时间。 - Shepmaster
@クリホ 我会等待原帖作者的评论。 - Boiethios
我认为分治算法是普适且最佳的解决方案。这是因为它是普适的,也是唯一的。 - Alex Koz.
召唤 @Shepmaster。 - Alex Koz.
这个解决方案可以加快编译时间和链接时间。但是链接时间可能不会减少。无论如何,我会等几个小时并给出+50 - Alex Koz.
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接