允许使用Rust稳定和夜间通道并行编译代码有多难?

Pur*_*reW 9 rust rust-cargo

Cargo创建的默认文件树允许并行编译发布和调试版本,因为它们位于自己的目录中; target/release而且target/debug,分别.

同样允许并行编译stable/ nightly-compiler 是多么困难.例如,使用目录

  • target/debug/stable
  • target/debug/nightly

我知道它可以用jails /容器来完成,但我希望有更多的货物解决方案.

She*_*ter 12

现代锈

我相信你重建依赖关系的主要问题不再存在:

$ cargo +nightly build
    Updating crates.io index
   Compiling either v1.5.0
   Compiling itertools v0.8.0
   Compiling example v0.1.0 (/private/tmp/example)
    Finished dev [unoptimized + debuginfo] target(s) in 5.87s
$ cargo +stable build
   Compiling either v1.5.0
   Compiling itertools v0.8.0
   Compiling example v0.1.0 (/private/tmp/example)
    Finished dev [unoptimized + debuginfo] target(s) in 2.67s
$ cargo +nightly build
    Finished dev [unoptimized + debuginfo] target(s) in 0.17s
$ cargo +stable build
    Finished dev [unoptimized + debuginfo] target(s) in 0.16s
Run Code Online (Sandbox Code Playgroud)

认为这是渐进式编译工作的副作用:编译器版本(或等效的东西)用作构建工件的散列算法的一部分.因此,来自多个工具链的伪像可以共存.

这并不能掩盖最终神器,它有一个固定的名字,将被覆盖.如果你真的需要保持两者并行,请继续阅读.

原始答案

如下所述,是否可以停用货物中的文件锁定?,您可以CARGO_TARGET_DIR为您感兴趣的每个频道设置环境变量:

$ CARGO_TARGET_DIR=$PWD/stable rustup run stable cargo build
   Compiling many v0.1.0 (file:///private/tmp/many)
    Finished debug [unoptimized + debuginfo] target(s) in 0.89 secs
$ CARGO_TARGET_DIR=$PWD/nightly rustup run nightly cargo build
   Compiling many v0.1.0 (file:///private/tmp/many)
    Finished debug [unoptimized + debuginfo] target(s) in 0.62 secs
$ ./stable/debug/many
Hello, world!
$ ./nightly/debug/many
Hello, world!
Run Code Online (Sandbox Code Playgroud)

  • @PureW不值得一个完整的答案,但我有一个[`test-matrix.py`](https://github.com/DanielKeep/rust-script-toolbox/blob/master/test-matrix.py)脚本为(简单)Travis CI配置这样做. (2认同)