Skip to content

【功能建议】切换 Target 时输出文件名应跟随 ConfigName 自动变化 #549

@favorite100

Description

@favorite100

摘要

在多 Target 项目中切换 Target 时,输出文件名(.hex/.axf/.elf)不会跟随所选的 ConfigName 变化,而是保持 eide.yml 顶层 name 字段的旧值,容易导致混淆和烧录错误固件的风险。

问题描述

问题发现过程

在使用 EIDE 的 Target 切换功能时发现此问题。项目中有两个 Target:

可用 Target:
┌───────────────────────────────┐
│  MyProject_Debug              │ ← 当前选中的
│  MyProject_Release            │
└───────────────────────────────┘

选中 MyProject_Debug 并执行构建后,输出结果如下:

build/MyProject_Debug/           ← 目录名与 ConfigName 一致 ✅
  └── MyProject_Release.hex      ← 文件名仍然是 "Release" ❌ 不一致!

用户界面显示当前选中的是 Debug,但输出的固件文件名却是 Release,非常容易混淆。

当前行为

eide.yml 中存在 两个独立的字段 分别控制命名:

# 顶层字段:决定 输出文件名(.hex/.axf/.elf)
name: MyProject_Release    # → 输出:xxxRelease.hex

targets:
  # Target 键名:决定 构建目录名(ConfigName)
  MyProject_Debug:         # → 目录:build/xxxDebug/
    toolchain: ARM-GCC
    ...

当用户切换 Target 时,EIDE 只更新了 ${ConfigName},但 没有同步更新 eide.yml 的顶层 name 字段。导致输出文件名停留在旧值。

期望行为

切换 Target 时,输出文件名应自动跟随新的 ConfigName:

build/MyProject_Debug/
  └── MyProject_Debug.hex   ✅ 文件名与目录名、所选 Target 一致

根因分析

通过分析 unify_builder.exe 生成的 builder.params 文件:

{
    "name": "MyProject_Release",        // 来自 eide.yml 顶层 "name"
    "target": "MyProject_Debug",         // 来自 targets 的键名 = ConfigName
    "env": {
        "ConfigName": "MyProject_Debug",       // = target 键名
        "ProjectName": "MyProject_Release",     // = eide.yml 的 "name" ❌ 未同步!
        "ExecutableName": "...\\MyProject_Release"
    }
}

关键发现:

  • ${ConfigName} = targets 的键名 → 用于构建目录
  • ${ProjectName} = eide.yml 顶层 name → 用于输出文件
  • 切换 Target 时这两个字段 从未被同步

建议修复方案

方案 A(推荐):切换 Target 时自动同步 name 字段
当用户在 EIDE 界面中选择不同的 Target 时,自动将 eide.yml 顶层 name 更新为所选 Target 的键名。只需一行代码:

// 当 target 切换时:
ymlData.name = selectedTargetKey;  // 同步 name → ProjectName 跟随 ConfigName

方案 B:默认使用 ConfigName 作为输出文件名
修改 unify_builder.exe 的逻辑,让 ${ProjectName} 在两者不一致时默认取 ${ConfigName} 的值。确保输出文件名始终与构建目录一致。

方案 C:添加设置项供用户选择
在 eide.yml 或 VSCode 设置中增加选项,如 "syncOutputNameWithTarget": true,让用户自行决定是否开启此行为。

环境

  • EIDE 版本: 3.27.0(最新版)
  • VSCode: 最新版
  • 操作系统: Windows 10/11
  • 构建工具: unify_builder.exe v12.1.1

影响范围

方面 程度 说明
用户体验 所选 Target 与输出文件名不一致,令人困惑
安全性 可能导致烧录错误的固件到硬件
影响范围 所有多 Target 项目 只要有 2 个以上 Target 的项目都会遇到

参考

  • 在包含多个 Target 的标准嵌入式项目中验证了此问题
  • builder.params 文件证实了命名变量来源相互独立
  • 可复现步骤:创建任意含 2 个以上 Target 的项目,切换 Target 后检查输出文件名

感谢考虑此改进建议!EIDE 是一款优秀的嵌入式开发工具。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions