【问题标题】:Why is cargo build cache invalidating?为什么货物构建缓存无效?
【发布时间】:2020-07-07 05:55:31
【问题描述】:

我有一个准系统工作区项目:

.
├── build-debug.sh
├── Cargo.lock
├── Cargo.toml
├── common
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
├── rs-test.iml
├── server
│   ├── Cargo.toml
│   └── src
│       └── main.rs
└── wui
    ├── Cargo.toml
    └── src
        └── lib.rs

rs 文件要么是空的,要么只是一个空的 main 函数。

服务器和wui依赖common:common = { path = "../common" }

通用项目有一个 crates.io 依赖项,我想是构建脚本或 proc 宏依赖项。

构建脚本:

cargo build -p wui --target wasm32-unknown-unknown
cargo build -p server

问题:

当我重建未更改的项目时,一些 wui 依赖项正在失效/重建,然后服务器也是如此。

要么:

  • 移除 wasm32 目标标志
  • 用一个没有构建时编译依赖项的简单 crate 替换依赖项

它不再重建子项目。

这是货物错误吗?我能做什么?

【问题讨论】:

  • 我不知道解决方案是什么,只是想说你的工作区图看起来很整洁!

标签: rust webassembly rust-cargo


【解决方案1】:

这可能不是货物错误。这里可能发生的情况是您的 crates.io 依赖项(您没有提及它是什么,这可能很有用)根据目标架构具有不同的依赖项或功能。因此,当您在构建 WASM 目标和主机目标之间交替时,正在重建东西。

或许在这种情况下最好停止使用 Cargo 工作区,单独构建服务器和 wui;这样,您将为服务器和 wui 拥有单独的 target 目录,这会占用一些额外的磁盘空间并且需要更长的时间进行非增量编译,但会阻止您在构建两者时一直重建这些东西。

【讨论】:

  • > 当您在构建 WASM 目标和主机目标之间交替时,正在重建东西 - 这实际上是不可能的,因为当指定 --target 时,它会进入一个单独的目录: > 构建时对于另一个带有 --target 的目标,输出被放置在一个具有目标名称的目录中 - doc.rust-lang.org/cargo/guide/build-cache.html
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多