Rust 我能阻止cargo在每个新项目中重建库吗?

Rust 我能阻止cargo在每个新项目中重建库吗?,rust,rust-cargo,Rust,Rust Cargo,假设我执行cargo new one--bin和cargo new two--bin,然后将相同的依赖项添加到每个项目的cargo.toml并构建它们 现在有两组完全相同的库: /one/target/debug/deps/*.rlib /两个/target/debug/deps/*.rlib 它们是相同的文件,浪费了存储空间,但真正的问题是我必须为每个项目重新编译这些库。这需要很多时间。货物安装也存在同样的问题 我可以指定一个存储已编译库的位置以避免重新编译吗?即使有办法,您也可能不想这样做。

假设我执行
cargo new one--bin
cargo new two--bin
,然后将相同的依赖项添加到每个项目的
cargo.toml
并构建它们

现在有两组完全相同的库:

/one/target/debug/deps/*.rlib

/两个/target/debug/deps/*.rlib

它们是相同的文件,浪费了存储空间,但真正的问题是我必须为每个项目重新编译这些库。这需要很多时间。
货物安装也存在同样的问题


我可以指定一个存储已编译库的位置以避免重新编译吗?

即使有办法,您也可能不想这样做。仅仅因为您碰巧使用了相同的库,并不意味着它们被编译为相同的库。例如,更改板条箱编译方式的编译时间配置

同样,您可能需要支持多个版本的Rust,例如nightly和stable。或者,您可能需要为不同的体系结构进行交叉编译。每种方法都会产生不同的代码


Cargo将缓存单个项目的构建产品,因此我发现开销并不是很明显,我从询问堆栈溢出问题的人那里编译了很多项目!:-)

多个Cargo项目可能通过使用相同的目标目录共享库

.货物/配置 在项目中放置一个“.cargo”文件夹,并在其中创建一个“config”文件,其中包含:

[build]
target-dir = "/path/to/your/shared/target/dir"
在Unix上,这可能如下所示:

mkdir~/shared\u rust\u目标
mkdir.货物
echo“[build]”>.cargo/config
echo“target dir=\”$HOME/shared\u rust\u target\”>.cargo/config
货物运输主任 设置
CARGO\u TARGET\u DIR

在Unix上,这可能如下所示:

export CARGO\u TARGET\u DIR=“$HOME/shared\u rust\u TARGET”

有关一些额外的
target dir
文档,请参阅

特别是,在Cargo 1.9之前,您不应该同时将多个项目构建到同一个目标目录中。(关于Cargo 1.9如何支持并发构建)

target dir
中也提到了

请注意,就我个人而言,我只是使用
targetdir
功能将构建重定向到不同的位置,因此我从未尝试过执行共享构建。但它应该会起作用,根据



另外,现在还可以使用实现板条箱重用。

我可以配置这些库的缓存位置吗?我使用Docker来构建我的项目,我认为它不允许缓存,因此构建时间更长。我可以使用另一个答案中提到的
target dir
吗?@RajeevRanjan我已经用您可以选择在Docker中使用的环境变量更新了另一个答案。但是,你不需要这样做,正如在Thank@shepmasters中所指定的,这是一个非常奇怪的不回答。当然,您希望它缓存东西并冗余地编译世界。它只需要智能地完成,工件必须键入影响构建的所有相关因素。目标、编译器、特性等。这些通常是相同的。