Silentdoer

导航

Cargo.toml配置

-1.注意,网上很多讲依赖版本的文章是错误的,比如我用actix-rt = "2.0.0",那么cargo check是会自动升级为2.6.0的【最新版】,用tokio = "1.0.1"也是会自动升级为1.17.0的,网上很多文章说这种情况只会升级为小于1.1.0的版本,即1.0.N,N是最大,但是这个是错误的【至少在2021和2018版本是错误的(resolver=1或2都是),实际上都会升级到大版本的最新版本】

0.在Cargo.toml里添加的依赖,哪怕程序里没有用到,它也会编译(不过由于没有用到,第二次build就不会再去编译了【但是不是说就随便添加,比如我们的代码在依赖a里和依赖b(我们的代码相当于是依赖的插件,即我们给依赖库写依赖代码)里都会用到,然而我们在Windows系统只需要依赖a,Linux系统只需要依赖b,如果我们两个都添加了,然后改了代码,会导致a和b都重新构建,所以最好是用cfg来条件添加依赖】),所以最好是只添加会用到的依赖;

1.有的时候我们可能会遇到这种情况,就是希望如果要编译的目标平台(比如交叉编译由Ubuntu - Windows[10|7|8]),我们希望不同的target添加一些额外的切换一些依赖【最典型的就是GUI后端,win7是DX11,win10是DX12,MacOS是Metal,Linux是Vulkan】

2.这个时候我们可以用这种dependencies配置:

[dependencies]
[target.'cfg(target_os = "windows")'.dependencies]
nameof = "1.0"

[target.'cfg(target_os = "linux")'.dependencies]
serde="1"

这里的target_os是根据我们cargo build --target=x86_64-pc-windows-gnu来的,我们可以用rustc --print=cfg --target=x86_64-pc-windows-gnu命令查看当target平台是x86_64-pc-windows-gnu的时候,target_os,target_arch,target_env等是什么;

CARGO_CFG_TARGET_OSCARGO_CFG_TARGET_ARCH等环境变量是没有关系的;

build时加个-v可以查看这次build用到了哪些依赖

3.如果要区分Windows10,Windows7,可以自定义target,这个待研究,初步看了下和RUST_TARGET_PATH有关;

posted on 2020-06-07 12:49  Silentdoer  阅读(3709)  评论(0编辑  收藏  举报