我现在项目想使用几个dependencies, 在我自己笔记本上已经可以build,需要下载几十个依赖包 但是公司是绝对的内网,不能上网,也没法搭建git环境,如果把下载的包拷贝到内网,如何编译?cargo能否在offline下找到路径进行编译? 谢谢!
1
共 6 条评论, 1 页
我现在项目想使用几个dependencies, 在我自己笔记本上已经可以build,需要下载几十个依赖包 但是公司是绝对的内网,不能上网,也没法搭建git环境,如果把下载的包拷贝到内网,如何编译?cargo能否在offline下找到路径进行编译? 谢谢!
评论区
写评论可以参考我这边博客: 在天河二号上配置 Rust 环境
这个我有经验,下面是我摸索的最简单步骤: 1.使用rustup管理外网机器的rust版本,你需要什么包在外面建一个空工程,在cargo.toml里写好依赖,然后cargo build一次,让它下载下来。 2.以windows为例,把你c:\Users\用户名 下的.rustup和.cargo文件夹迁移到相应位置,然后把环境变量添加好。 3.在你内网的机器里需要什么依赖就在cargo.toml里写好,然后记得改动cargo.toml后的第一次编译需要cargo build --offline 一次,以后不改依赖的话就可以直接cargo build(主要是为了cargo.lock生成)
以后每次更新直接覆盖掉第二步的两个文件夹即可,这是我找到的最方便的方法
我只会rustc开-L选项编译
参考:https://stackoverflow.com/questions/31029095/disable-registry-update-in-cargo
Mac上我是可以配置的:
cargo vendor
https://doc.rust-lang.org/cargo/commands/cargo-vendor.html
先说答案:能!cargo 能在断网的情况下编译。 做一下简单测试:先联网的情况下 cargo r 跑一遍如果没有问题,断网后:执行 cargo clean 清除编译结果,再次运行 cargo r 能够顺利编译。 cargo 编译检查依赖的时候首先查看本地缓存,如果没有找到相应文件,再去远程下载。
现在的问题就是如何把一台电脑上的缓存复制到另一台电脑上。也不难,拷贝几个文件夹,设置几个环境变量。最关键的一个坏境变量是:CARGO_HOME,指向cargo的工作文件夹,下面有bin,有registry,有git等文件夹,配置文件config.toml也放在这里。registry下面就是缓存的文件。复制的时候把整过CARGO_HOME指向的文件夹复制过去就行了。CARGO_HOME可以指向任何硬盘位置,放在C盘显然不合适,每次重装系统就覆盖了。
我的做法是:将所有免安装绿色软件放到D:\Programs文件夹下,D:\Programs下有Git,有mingw64等下级文件夹,当然也有一个Rust文件夹,Rust文件夹下建立cargo与rustup两个子文件夹,有一个SetEnvs.bat文件,看看SetEnvs.bat中的内容:
再看看 D:\Programs\Rust\cargo文件夹下config.toml文件的内容:
我每次重装系统,只需要SetEnvs一下,然后rustup,cargo就能跑了。 有一个例外,我需要msvc,微软VC++的编译环境每次需要联网安装,我不知道如何绿化。