我在玩Rust时,遇到了一个cargo项目源代码中的错误,我更改了代码来修复该错误并重新编译了该项目,但它仍然使用旧代码,这让我思考。
Rust 是在我的机器上编译 cargo 包的源代码还是结果来自云端?如果在我的机器上编译,是否只完成一次?结果在哪里?如果它们是在云中编译的,并且二进制文件是静态的,那么如何保持(Rust)版本之间的兼容性?或者每个 Rust 版本都有一个二进制文件吗?
最佳答案
Cargo 仅在本地计算机上编译代码 - 没有内置支持从互联网下载预构建的 Rust 二进制文件。您可以在~/.cargo/registry/src
(Linux路径)中找到您所使用的依赖项的源代码。 Cargo 将所有生成的二进制文件放置在项目的 target
目录中;它甚至不重用在本地计算机上编译的依赖项。
但是,通过安装和使用sccache ,您实际上可以在本地项目和云之间共享依赖二进制文件。
对于在本地编辑依赖项的特定情况,您需要使用 Overriding Dependencies 技术在本地修补源代码。在缓存中编辑代码时,Cargo 不会检查更改,因此您不会看到就地补丁的任何更改。
最后,Cargo 在 target/debug/deps
中生成的每个 crate .rlib
文件相当于 C 对象文件 - 它们需要全部链接在一起才能生成有效的可执行文件或库。它们之间的ABI依赖于Rust版本,这就是为什么切换工具链会导致它们全部重新构建。
关于rust - Rust 的 Cargo 包可以在我的机器上编译代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69959768/