DEBUG.WIKI
京东云;让 AI 进入真实业务;零售 · 物流 · 客服 · 硬件;查看方案 →
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →

Cargo 没采用 target 的 runner

Cargo nightly 调整配置查找后,含点号 target 的未引号表与环境变量可能被忽略。核对工具链日期、引号表头和 runner 的实际执行入口。

更新到 nightly-2026-09-24 后,为 thumbv8m.main-none-eabihf 配置的 runner 或 rustflags 不再生效,Cargo 直接尝试运行目标程序,或编译时没有带上原有参数。先看 target 表名是否把包含点号的目标写成了未加引号的 TOML 键。

这组变化涉及 Cargo 1.100 的 nightly 配置查找调整。不能把它概括为所有稳定版都会忽略 target;受影响的新 nightly 与此前工具链,对含点号表名的读取方式有不同表现。

点号会改变 TOML 表的层级

下面的表头不是把完整目标字符串作为一个键:

[target.thumbv8m.main-none-eabihf]

TOML 会把点号解释为键的层级边界,形成 target 下的 thumbv8m,再到 main-none-eabihf。旧查找代码同样拆开点号,意外读到了这份嵌套表,所以旧配置能够生效。

新查找方式将整个目标名称作为一个键。对于这组受影响的新 nightly,应使用带引号的完整名称:

[target."thumbv8m.main-none-eabihf"]

修改的是已有表头,原来的 runner、rustflags、linker 等内容仍要保留。不要用一个空表覆盖掉项目要求的运行器和链接参数。

此前的部分工具链又存在正确引号形式没有被读取的问题。因此应记录实际 cargo、rustc 版本及 nightly 日期,把配置调整与工具链选择一起检查,不能只在一台新环境改好表头,就认为所有旧 CI 都会兼容。

环境变量另有一条查找分支

这一调整还曾影响含点号目标对应的环境变量,例如 CARGO_TARGET_THUMBV8M_MAIN_NONE_EABIHF_RUNNER。环境变量名应将点号和连字符转换为下划线;受影响实现漏掉了点号转换。

给 TOML 表头加引号不会自动修复这条环境变量路径。如果 CI 完全依靠环境变量配置 runner 或 flags,应采用包含相应修复的工具链,或者在这组新 nightly 中改用经过核对的引号表配置。

同时检查配置优先级。--config、环境变量与配置文件可能提供不同的值;命令行覆盖和环境变量可以让文件中的正确表看起来仍未生效。配置发现也与工作目录有关,应在原来失败的步骤中核对。

不要绕过运行器来消除错误

含相应修正的变更已回移到 Rust 1.100 的 beta 分支,但这不表示 1.100 稳定版已经发布。修正后的实现还为部分既有含点号目标保留未加引号形式的兼容读取,并提示以后可能忽略或拒绝这种写法;它不是所有自定义目标的永久兼容保证。

优先把配置迁移到完整的引号键,并保持本地与 CI 的工具链约定。确认实际编译参数包含原有 target flags,目标程序经过指定 runner,而不是仅看构建退出状态。

嵌入式目标通常不能在构建主机直接执行。删除 runner、改成主机目标,或取消链接参数虽然可能改变报错,却改变了原项目的运行契约;涉及烧录或设备操作的 runner,还要在获准的环境验收其动作范围。

修改前保留 target 配置与固定工具链声明。出现回归时恢复两者,再核对实际选中的版本;不要靠最新 nightly 的偶然表现替代项目的版本管理。