Rust中Cargo.toml与.cargo/config.toml的区别是什么
Cargo.toml 与 .cargo/config.toml 的功能差异
两者是Cargo构建体系中定位完全不同的两类配置文件,依赖项声明仅能写入Cargo.toml,写入.cargo/config.toml报错是符合预期的行为。
Cargo.toml:项目级清单文件
- 是每个Rust项目根目录下必须存在的核心配置,属于项目源码的一部分,通常会纳入版本控制
- 负责存储所有和项目自身绑定的配置:包括项目元信息(名称、版本、作者)、依赖声明、编译特性开关、构建目标定义、构建脚本路径、工作区配置等
- Cargo在执行构建、依赖拉取、链接等操作时,只会从该文件读取
[dependencies]、[dev-dependencies]等段落的依赖配置。你将bootloader = "0.9.8"移入该文件后cargo bootimage能正常运行,就是因为Cargo正确识别到了这个依赖,完成了拉取和编译链接流程 - 同目录下自动生成的
Cargo.lock是依赖版本锁定文件,不需要手动编辑。
.cargo/config.toml:本地环境级Cargo行为配置
- 该文件存放于项目根目录的
.cargo隐藏文件夹下,属于本地构建环境的个性化配置,默认不会被纳入版本控制 - 作用是修改Cargo命令本身的运行行为,支持的配置项包括:第三方注册源/镜像地址、默认编译目标、自定义运行器、命令别名、构建时注入的环境变量、代理配置等
- 该文件的配置规则中完全没有定义
[dependencies]相关的配置段,你之前把依赖配置写入这里时,Cargo要么直接抛出「未知配置字段」的解析错误,要么直接忽略非法配置段导致bootloader依赖未被引入,最终导致构建失败 - 编写内核场景下,该文件的典型合法配置示例如下:
[build] # 设置默认交叉编译目标为x86_64裸机平台 target = "x86_64-unknown-none" [target.'cfg(target_os = "none")'] # 配置裸机目标的默认运行器为bootimage runner = "bootimage runner"
内容的提问来源于stack exchange,提问作者izzy
相关产品推荐
相关产品推荐

