Cargo工作区中.cargo/config.toml的放置与全局依赖配置方法
问题描述
根据《Cargo Book》3.6配置章节的说明:
从工作区根目录调用cargo时,不会读取工作区内单个包的
.cargo/config.toml文件。例如工作区包含mylib和mybin两个包,它们各自的配置文件在根目录调用时不会被加载。
目前官方文档未明确说明工作区全局.cargo/config.toml的放置位置,需求是:指定一个统一目录(比如工作区根目录下的vendoredcode文件夹),让工作区所有包都能从中读取外部依赖的vendored代码。
单个独立包中的配置方式是在包根目录放置.cargo/config.toml,内容如下:
[source.crates-io] replace-with="vendored-sources" [source.vendored-sources] directory="path/to/package/root/vendoredcode"
请问如何在工作区中用单个.cargo/config.toml实现相同效果?
注:统一使用“package(包)”而非“crate”,因为一个包可包含多个二进制crate和一个库crate,以此避免混淆。
解决方案
直接在工作区根目录下创建.cargo/config.toml文件,配置路径时使用相对于工作区根目录的相对路径即可,具体配置内容如下:
[source.crates-io] replace-with="vendored-sources" [source.vendored-sources] directory="./vendoredcode"
原理说明
Cargo会从执行命令的当前目录开始向上递归查找.cargo/config.toml文件,工作区根目录的配置会被所有子包共享:
- 从工作区根目录执行命令时,直接读取根目录的配置文件;
- 从子包目录执行命令时,会向上找到根目录的配置文件并加载。
这样就能实现工作区所有包共用同一vendored依赖源的效果。
内容的提问来源于stack exchange,提问作者Keyboard Penman
相关产品推荐
相关产品推荐

