Keil5 Build Command 技巧
Keil5 Build Command 技巧
nixgnauhcuy前言
Keil MDK 是嵌入式开发中高频使用的 IDE 工具,许多芯片的 SDK 都包含 keil 对应的开发工程。
最近在使用过程中,同事提出了一个需求,希望将编译的输出文件(如 bin、hex、axf、map)统一输出到整个项目的根目录,便于统一管理,这样就不用每次进入项目里,一层一层的查找输出的文件。这些文件还可能分布在不同的地方,例如 ./Listings
目录中存放 .bin
和 .map
文件,而 ./Objects
目录中存放 .axf
和 .hex
文件。这对不了解项目结构的工程师非常不友好。
对于他的考虑,我完全赞同,因为在一个项目中,后续接手的人可能不需要了解代码的具体实现和工程结构,他们只需要找到对应的输出文件,拿来对芯片进行烧录。
既然需求有了,那么就需要考虑怎样实现了,原先我想的是在根目录里,写一个 python 脚本,直接运行定位到具体文件路径并拷贝出来,但是这样还需要多一个步骤,就是手动运行脚本,所以不是特别的自动化,那么有没有办法直接在运行的过程中,就将文件处理好呢?
当然是有的,不然就没有这篇文章了,Keil 提供的 Command Items
,可以实现上面的需求。
Build Command
Keil 提供的 Command Items,在 Keil - 魔术棒 - User
里,分别提供了几个选项:
- Before Compile C/C++ File - 编译 C/C++ 文件之前运行
- Before Build/Rebuild - 编译之前运行
- After Build/Rebuild - 编译之后运行
每个选项提供了两条可运行的命令,我们需要根据需求在 User Command 中填入相应的命令,以实现所需功能。
基于我们之前的需求,即在编译之后运行命令将输出文件拷贝到目标目录,我们需要使用 After Build/Rebuild
选项。然而,Keil 只提供了两条可运行的命令,这对于我们的需求显然是不够的。所以我保留了一条用于将 .axf 文件转换为 .bin 的命令,将另一条命令用来实现文件的拷贝操作。
首先,在工程目录(即 .uvprojx
文件所在目录)创建一个 .bat
文件,我将其命名为 build_script.bat
,内容如下:
1 | @echo off |
在 Keil 中,填写的命令如下图所示:
命令为:.\build_script.bat test_project
这个 .bat 文件的主要功能如下:
- 设置变量:通过 set BUILD_NAME=%1 接收传入的参数,对应项目的名称。
- 设置输出路径:使用 set OUTPUT_PATH=“…..\build_out” 指定输出文件的路径。
- 创建输出目录:使用 mkdir %OUTPUT_PATH% 2>nul 判断输出目录是否存在,如果不存在则创建它。
- 复制文件:使用 copy 命令将生成的 .bin、.map、.hex 和 .axf 文件复制到输出目录中。
- 完成提示:脚本执行完成后,打印提示信息 Done 并退出。
通过上述步骤,我们可以在编译完成后,自动将所有需要的输出文件统一拷贝到指定的目录中,从而实现统一管理,简化后续操作。
所以每次编译完,就会运行对应的 .bat 脚本,将输出的内容 copy 到对应的文件,这样,就完成了之前提出的需求了。
结语
所以善用,Keil 的 Build Command,可以实现不同的效果,不需要局限与我上述的需求例子。