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_OS
,CARGO_CFG_TARGET_ARCH
等环境变量是没有关系的;
build时加个-v可以查看这次build用到了哪些依赖;
3.如果要区分Windows10,Windows7,可以自定义target,这个待研究,初步看了下和
RUST_TARGET_PATH
有关;