2026/3/30 22:57:42
网站建设
项目流程
百度站长工具大全,什么设计师最吃香,建设部执业注册网站,小制作废品利用想看更多嵌入式干货、工具技巧#xff0c;踩坑记录#xff0c;也欢迎关注#xff1a;公众号#xff1a;啊哈哈哈111 由于 keil5 默认不生成 .elf 文件#xff0c;所以需要一个脚本实现编译项目的同时生成 .elf 文件#xff0c;使用 e2 studio 或 STM32CubeIDE 这类 IDE 会…想看更多嵌入式干货、工具技巧踩坑记录也欢迎关注公众号啊哈哈哈111由于 keil5 默认不生成 .elf 文件所以需要一个脚本实现编译项目的同时生成 .elf 文件使用 e2 studio 或 STM32CubeIDE 这类 IDE 会自动生成.elf 文件。1. 打开 keil5 安装目录的文件夹 Keil_v5 。2. 在此目录下新建文件夹 Postbuild 。3. 在新建的 Postbuild 文件夹下新建文件 postbuild.bat 。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 FROMELFC:\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% 2nul 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_ELF1 set GENERATE_BIN0 set GENERATE_HEX0 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. endlocal5. 打开 keil5 的项目打开 Options for Target... 魔术棒图标 。切换到 User 选项卡。找到 After Build/Rebuild 下的 User Command 并勾选Run#1。点击文件夹图标选中之前新建postbuild.bat 文件并打开在点击User Command修改该命令在命令的最后加上 空格#L #L最后点击 OK。6. keil5 中点击编译出现如下表示生成 .elf 文件成功现在每次编译都会生成生成的文件在.hex 文件同目录 [PostBuild] Generating ELF... [PostBuild] Done.如果.bat 脚本没有自动查找到 fromelf.exe 请手动修改路径。完整步骤视频MCUViewer想看更多嵌入式干货、工具技巧踩坑记录也欢迎关注公众号啊哈哈哈111