Cargo Book(第3.6. Configuration页)中指出,当从工作区根目录调用cargo
时,不会读取工作区中为各个包指定的.cargo/config.toml
文件。
目前,当从工作区调用时,Cargo不会从工作区内的crate读取配置文件。也就是说,如果一个工作区中有两个crate,分别命名为/projects/foo/bar/baz/mylib
和/projects/foo/bar/baz/mybin
,并且在/projects/foo/bar/baz/mylib/.cargo/config.toml
和/projects/foo/bar/baz/mybin/.cargo/config.toml
处有Cargo配置,那么如果从工作区根目录(/projects/foo/bar/baz/
)调用Cargo,它不会读取这些配置文件。
另外,在14.3. Cargo Workspaces - The Rust Programming Language或3.6. Configuration - The Cargo Book中,都没有明确指定将工作区中所有包通用的.cargo/config.toml
放在何处。
这里我的目标是指定一个文件夹,工作区中的所有包都应该在这个文件夹中查找外部依赖项的出售代码。
就像如果path/to/workspace/root
是工作区根文件夹一样,工作区中的包应该在path/to/workspace/root/vendoredcode
中查找供应商的外部依赖项。
对于工作区之外的单个包,我会将其.cargo/config.toml
放在包根目录中,并在其中放入以下内容:
[source.crates-io]
replace-with="vendored-sources"
[source.vendored-sources]
directory="path/to/package/root/vendoredcode"
如何对工作区中的所有软件包使用单个.cargo/config.toml
文件执行相同的操作?
PS:由于我一直使用“package”一词,有些人可能会经常使用“crate”一词,因此可能会有一些混淆。
我读到一个单独的包(一个包含Cargo.toml
的文件夹和一个包含main.rs
和/或lib.rs
的src
子文件夹)实际上可以同时包含多个二进制crate和一个库crate,所以我更喜欢使用术语“包”而不是“crate”。
这个选择是为了避免混淆,虽然我承认,虽然它可能会避免与一组人混淆,但它可能会造成与另一组人的混淆。因此,这一澄清。
1条答案
按热度按时间vybvopom1#
只需将
.cargo/config.toml
放在工作区的根目录。