Rust 的 Cargo 包会在我的机器上编译代码吗?

Do Rust's Cargo packages compile code on my machine?

我在玩 Rust 时遇到一个 cargo 项目源代码中的错误,我更改了代码以修复错误并重新编译了项目,但它仍然使用旧代码,这让我想到了。

Rust 是在我的机器上编译 cargo 包的源代码还是结果来自云端?如果在我的机器上编译它只做一次吗?结果在哪里?如果它们是在云中编译的,如果二进制文件是静态的,那如何保持(Rust)版本之间的兼容性?或者是否有每个 Rust 版本的二进制文件?

Cargo 仅在本地机器上编译代码 - 没有内置支持从 Internet 下载预构建的 Rust 二进制文件。您可以在~/.cargo/registry/src(Linux 路径)中找到您使用过的依赖项的源代码。 Cargo 将所有生成的二进制文件放在项目的 target 目录中;它甚至不重用在本地机器上编译的依赖项。

但是,通过安装和使用 sccache,您实际上 可以 在本地项目和云之间共享依赖二进制文件。

对于您在本地编辑依赖项的特定情况,您希望使用 Overriding Dependencies 的技术在本地修补源代码。在缓存中编辑代码时,Cargo 不会检查更改,因此您不会看到就地补丁的任何更改。

最后,Cargo 在 target/debug/deps 中生成的每个 crate .rlib 文件等同于 C 目标文件——它们需要全部链接在一起才能生成有效的可执行文件或库。它们之间的 ABI 依赖于 Rust 版本,这就是为什么切换工具链会导致它们全部重建。