news 2026/8/14 14:41:41

keil5 自动生成 .elf文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
keil5 自动生成 .elf文件

想看更多嵌入式干货、工具技巧,踩坑记录,也欢迎关注:公众号:啊哈哈哈111

由于 keil5 默认不生成 .elf 文件,所以需要一个脚本实现编译项目的同时生成 .elf 文件,使用 e2 studio 或 STM32CubeIDE 这类 IDE 会自动生成.elf 文件。

  1. 1. 打开 keil5 安装目录的文件夹📂 Keil_v5 。

  1. 2. 在此目录下新建文件夹📂 Postbuild 。

  1. 3. 在新建的📂 Postbuild 文件夹下新建文件 postbuild.bat 。

  1. 4. 用记事本打开并复制粘贴下面的代码,然后保存。

@echo off setlocal enabledelayedexpansion rem ============================================================================== rem Post‑Build 脚本:自动调用 fromelf.exe 生成 ELF / BIN / HEX rem 2025‑07‑25 修正版 rem ============================================================================== rem ────────────────────────────────────────────────────────────────────────────── rem 【可选】手动指定 fromelf.exe 路径(如需固定版本,可取消下一行注释并修改) rem set "FROMELF=C:\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe" rem ────────────────────────────────────────────────────────────────────────────── rem —— 缓存文件(存储已找到的 fromelf.exe 全路径) —— set "CACHE_FILE=%~dp0fromelf_path.cache" rem ============================================================================== rem 1) 自动查找 fromelf.exe rem ============================================================================== if not defined FROMELF ( rem 1‑a 从缓存读取 if exist "%CACHE_FILE%" ( set /p FROMELF=<"%CACHE_FILE%" if exist "!FROMELF!" ( echo [PostBuild] Found from cache: !FROMELF! ) else ( echo [PostBuild] Cache invalid, deleting... del "%CACHE_FILE%" 2>nul set "FROMELF=" ) ) rem 1‑b 已知路径(Keil 根目录下 ARM\ARMCLANG 或 ARM\ARMCC) if not defined FROMELF ( rem ▼▼▼ 关键修复:正确获取上一级目录完整路径 ▼▼▼ for %%I in ("%~dp0..") do set "KEIL_ROOT=%%~fI" rem ▲▲▲ 关键修复完毕 ▲▲▲ if exist "!KEIL_ROOT!\ARM\ARMCLANG\bin\fromelf.exe" ( set "FROMELF=!KEIL_ROOT!\ARM\ARMCLANG\bin\fromelf.exe" ) else if exist "!KEIL_ROOT!\ARM\ARMCC\bin\fromelf.exe" ( set "FROMELF=!KEIL_ROOT!\ARM\ARMCC\bin\fromelf.exe" ) if defined FROMELF ( echo [PostBuild] Found at known path: !FROMELF! echo !FROMELF!>"%CACHE_FILE%" ) ) rem 1‑c 递归搜索(最后手段) if not defined FROMELF ( echo [PostBuild] Recursively searching under "!KEIL_ROOT!"... for /f "delims=" %%F in ('where /r "!KEIL_ROOT!" fromelf.exe 2^>nul') do ( set "FROMELF=%%~F" goto :FOUND_FROMELF ) echo [Error] Could not find fromelf.exe under "!KEIL_ROOT!". exit /b 1 ) ) :FOUND_FROMELF echo [PostBuild] Using fromelf.exe: !FROMELF! rem ============================================================================== rem 2) 参数检查 rem ============================================================================== if "%~1"=="" ( echo [Error] No .axf file path provided. echo [Info ] Please configure Keil “After Build / User Command” 类似: echo C:\Keil_v5\Postbuild\postbuild.bat "#L" exit /b 1 ) rem .axf 完整路径 set "fullpath=%~1" rem ============================================================================== rem 3) 用户开关(1=启用,0=禁用) rem ============================================================================== set GENERATE_ELF=1 set GENERATE_BIN=0 set GENERATE_HEX=0 rem ============================================================================== rem 4) 提取文件名(name) 和 输出目录(dir) rem ============================================================================== for %%A in ("!fullpath!") do ( set "name=%%~nA" set "dir=%%~dpA" ) rem 去掉末尾反斜杠 set "dir=!dir:~0,-1!" echo. echo [PostBuild] Processing: !fullpath! echo [PostBuild] Output Dir: !dir! rem ============================================================================== rem 5) 生成文件 rem ============================================================================== if "!GENERATE_ELF!"=="1" ( echo [PostBuild] Generating ELF... "!FROMELF!" --elf --output "!dir!\!name!.elf" "!fullpath!" ) if "!GENERATE_BIN!"=="1" ( echo [PostBuild] Generating BIN... "!FROMELF!" --bin --output "!dir!\!name!.bin" "!fullpath!" ) if "!GENERATE_HEX!"=="1" ( echo [PostBuild] Generating HEX... "!FROMELF!" --i32 --output "!dir!\!name!.hex" "!fullpath!" ) echo [PostBuild] Done. endlocal
  1. 5. 打开 keil5 的项目,打开 "Options for Target..." (魔术棒图标 🪄)。切换到 "User" 选项卡。找到 "After Build/Rebuild" 下的 "User Command" 并勾选"Run#1"。点击文件夹📂图标,选中之前新建postbuild.bat 文件并打开,在点击"User Command"修改该命令,在命令的最后加上 空格"#L" "#L",最后点击 OK。

  1. 6. keil5 中点击编译,出现如下表示生成 .elf 文件成功,现在每次编译都会生成,生成的文件在.hex 文件同目录: [PostBuild] Generating ELF... [PostBuild] Done.

如果.bat 脚本没有自动查找到 fromelf.exe , 请手动修改路径。

完整步骤视频:

MCUViewer

想看更多嵌入式干货、工具技巧,踩坑记录,也欢迎关注:公众号:啊哈哈哈111

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/13 16:39:17

FastReport开源版:快速构建.NET报表系统的完整指南

FastReport开源版&#xff1a;快速构建.NET报表系统的完整指南 【免费下载链接】FastReport Free Open Source Reporting tool for .NET6/.NET Core/.NET Framework that helps your application generate document-like reports 项目地址: https://gitcode.com/gh_mirrors/f…

作者头像 李华
网站建设 2026/8/13 19:46:34

HeidiSQL数据库管理工具:从零开始的完整安装与使用指南

HeidiSQL是一款功能强大的免费数据库客户端工具&#xff0c;支持MySQL、MariaDB、PostgreSQL、SQLite等多种数据库系统。作为数据库管理员和开发者的得力助手&#xff0c;它提供了直观的图形界面&#xff0c;让数据库管理和数据查询变得简单高效。 【免费下载链接】HeidiSQL He…

作者头像 李华
网站建设 2026/8/13 16:39:14

MATLAB与XFoil翼型分析:终极集成指南

MATLAB与XFoil翼型分析&#xff1a;终极集成指南 【免费下载链接】XFOILinterface 项目地址: https://gitcode.com/gh_mirrors/xf/XFOILinterface 想要在熟悉的MATLAB环境中完成专业的空气动力学分析吗&#xff1f;XFOILinterface项目为你提供了完美的解决方案&#xf…

作者头像 李华
网站建设 2026/8/13 16:39:12

EmotiVoice语音合成在新闻播报自动化中的效率提升

EmotiVoice语音合成在新闻播报自动化中的效率提升 在信息爆炸的时代&#xff0c;新闻机构面临前所未有的挑战&#xff1a;如何在保证内容质量的同时&#xff0c;以最快的速度将资讯传递给用户&#xff1f;传统人工录制的播报方式早已难以满足“分钟级响应”的需求。而当一篇突发…

作者头像 李华
网站建设 2026/8/13 16:39:10

浏览器原生Python编程革命:JupyterLite深度解析与应用指南

浏览器原生Python编程革命&#xff1a;JupyterLite深度解析与应用指南 【免费下载链接】jupyterlite Wasm powered Jupyter running in the browser &#x1f4a1; 项目地址: https://gitcode.com/gh_mirrors/ju/jupyterlite 在当今数字时代&#xff0c;编程环境的便捷性…

作者头像 李华
网站建设 2026/8/14 8:26:13

Vue Query Builder 终极指南:快速构建可视化查询界面

Vue Query Builder 终极指南&#xff1a;快速构建可视化查询界面 【免费下载链接】vue-query-builder A UI component for building complex queries with nested conditionals. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-query-builder Vue Query Builder 是一…

作者头像 李华