S32DS Build Command 技巧
S32DS Build Command 技巧
nixgnauhcuy前言
这一篇与上一篇介绍 Keil MDK IDE 基本一致,所以直接引用上一篇的前言。
Keil MDK 是嵌入式开发中高频使用的 IDE 工具,许多芯片的 SDK 都包含 keil 对应的开发工程。
最近在使用过程中,同事提出了一个需求,希望将编译的输出文件(如 bin、hex、axf、map)统一输出到整个项目的根目录,便于统一管理,这样就不用每次进入项目里,一层一层的查找输出的文件。这些文件还可能分布在不同的地方,例如
./Listings
目录中存放.bin
和.map
文件,而./Objects
目录中存放.axf
和.hex
文件。这对不了解项目结构的工程师非常不友好。对于他的考虑,我完全赞同,因为在一个项目中,后续接手的人可能不需要了解代码的具体实现和工程结构,他们只需要找到对应的输出文件,拿来对芯片进行烧录。
既然需求有了,那么就需要考虑怎样实现了,原先我想的是在根目录里,写一个 python 脚本,直接运行定位到具体文件路径并拷贝出来,但是这样还需要多一个步骤,就是手动运行脚本,所以不是特别的自动化,那么有没有办法直接在运行的过程中,就将文件处理好呢?
当然是有的,不然就没有这篇文章了,Keil 提供的
Command Items
,可以实现上面的需求。
Build Command
S32DS 提供的 Build Command,在 菜单栏 - Project - Properties - C/C++ Build - Settings - Build Steps
里,可以找到以下选项:
- Pre-build steps - 编译前运行
- Post-build steps - 编译后运行
提供了一条可运行项,用户可以根据自己的需求填入相应的命令,实现所需的功能。
基于上面提出的需求,需要在编译之后,将输出文件拷贝到指定目录。因此,我们需要利用 Post-build steps
功能,在编译完成后执行相关命令,将输出文件拷贝到目标文件夹中。
首先,在工程目录中(即 .mex
文件所在的目录),创建一个 .bat
文件。我将其命名为 build_script.bat
,文件内容如下:
1 | @echo off |
在 S32DS 中,在 菜单栏 - Project - Properties - C/C++ Build - Settings - Build Steps
中的 Post-build steps
中填入以下命令:../build_script.bat ${ProjName}
。
这个 .bat
文件的主要功能如下:
- 接收参数:通过
set ProjName=%1
接收传入的参数,对应 S32DS 工程的名称${ProjName}
。 - 设置输出路径:使用
set OUTPUT_PATH="..\build_out"
指定输出文件的路径。 - 创建输出目录:使用
if not exist %OUTPUT_PATH% mkdir %OUTPUT_PATH%
判断输出目录是否存在,如果不存在则创建它。 - 复制文件:使用
copy
命令将生成的.elf
和.map
文件复制到输出目录中。 - 生成其他格式文件:使用
arm-none-eabi-objcopy
命令将.elf
文件转换为.s19
、.hex
和.bin
格式,并存放在输出目录中。 - 完成提示:脚本执行完成后,打印提示信息
Compilation completed successfully. Output files copied to build_out folder.
。
通过上述步骤,我们可以在编译完成后,自动将所有需要的输出文件统一拷贝到指定的目录中,从而实现统一管理,简化后续操作。
所以每次编译完,就会运行对应的 .bat 脚本,将输出的内容 copy 到对应的文件,这样,就完成了之前提出的需求了。
结语
上述就是针对 S32DS 这个 IDE,运用其提供的对应的 Build Command,完成我们需要的一些需求,当然不局限于我上述的,可以根据自己的需求,利用该功能定制化实现。