是否可以使用单个共享目录作为所有项目的 Cargo 目标目录?

Is it okay to use a single shared directory as Cargo's target directory for all projects?

Cargo 有 --target-dir 标志,它指定一个目录来存储临时或缓存的构建工件。您还可以在 ~/.cargo/config 文件中将其设置为用户范围。我想将它设置为单个共享目录,以便于维护。

我看到一些工件目录在 target-dir 中以一些独特的(?)哈希为后缀,这看起来很安全,但最终产品没有以哈希为后缀,这对于名称冲突似乎不安全。我不确定这一点,因为我不是 Cargo 方面的专家。

我尝试将 ~/.cargo/config 设置为

[build]
target-dir = "./.build"

我的初衷是使用项目的本地 ./.build 目录,但 Cargo 以某种方式将所有构建文件放入 ~/.build 目录。我很好奇如果将每个项目的所有构建文件都放入一个共享构建目录中会发生什么。

到目前为止,它在几个不同的项目中运行良好,但处理几个样本并不意味着它的设计或保证适用于所有情况。

在我的例子中,我为用户的所有工作区的所有项目使用单一共享构建目录。不仅是工作区中的项目。从字面上看,用户每个工作区中的每个项目。据我所知,Cargo 旨在与本地 target 目录一起使用。如果它设计为仅与本地目录一起使用,则共享构建目录可能会导致一些问题。

  • Rust/Cargo 1.38.0.

是的,这是为了安全起见。

我同意关于可能有更好的方法来实现您的目标的评论。 Workspaces are a simple solution for a small group of crates, and sccache是比较有原则的缓存机制。

另请参阅: