Dinor 发表于 2023-8-29 09:41:48

分享一个我开源的 keil 自动化编译脚本

Keil-Autopiler v1.0

1 需求来源
部分对开发流程有限制的公司是将开发与编译(提交后的代码版本)分开的,要求编译过程尽可能少的人为参与,需在程序上实现代码的自动化编译。基于此需求开发了本脚本。


2 介绍
这是一个 keil 的自动化编译脚本,可被其他脚本或程序调用,接收参数并按参数编译 keil 工程,而不必打开 keil 软件,实现程序上的自动化。主要实现了以下功能:

2.1自动搜索脚本所在的目录下所有的 keil 工程
    - 搜索到多个 keil 工程时,若指定为空,则默认选择最后找到的 keil 工程
    - 指定 keil 工程时支持相对路径和绝对路径

2.2可选择 Keil_v4 或 Keil_v5 进行编译
    - 为空时默认使用 Keil_v5 ,需指定 Keil_v4 输入 4 即可
    - 支持模糊输入,如: K4 , Keil4 , Keilv4 , Keil_4 等
    - 支持指定不同 keil 软件的所在路径,如: C:\Keil_v5\UV4\UV4.exe
    - 当 keil 的安装路径和本案例中的 D:\Keil_v5\UV4\UV4.exe 路径不同时,除非修改代码后重新编译成新的 .exe ,否则必须指定 keil 软件的所在路径

2.3 可选择 project target
    - 为空时默认选择 keil 工程最后选择的 project target
    - 支持非法字符识别并报错

2.4编译完成后自动将 .bin 和 .hex 文件拷贝至脚本的同级目录
    - 仅拷贝选定的 keil 工程编译出的 .bin 和 .hex 文件

3 开源地址
https://gitee.com/DinoHaw/keil-autopiler

更多信息请查看以上开源地址。


eric2013 发表于 2023-8-29 10:19:36

MDK自带了一个批处理的功能,建立后,可以随意修改使用




Dinor 发表于 2023-8-29 10:38:27

eric2013 发表于 2023-8-29 10:19
MDK自带了一个批处理的功能,建立后,可以随意修改使用

功能不一样,这个脚本的目的是为了给别的程序调用的,而且不能打开 keil 软件。

eric2013 发表于 2023-8-29 10:54:50

Dinor 发表于 2023-8-29 10:38
功能不一样,这个脚本的目的是为了给别的程序调用的,而且不能打开 keil 软件。
这个批处理一样的,生成一次之后,就不需要用户再打开MDK了,批处理文件里面生成了各种编译链接信息,头文件路径信息等。需要运行,点击这个批处理文件就行。

Dinor 发表于 2023-8-29 11:06:33

eric2013 发表于 2023-8-29 10:54
这个批处理一样的,生成一次之后,就不需要用户再打开MDK了,批处理文件里面生成了各种编译链接信息,头 ...

我试过这个,但没有找到生成的 bat 文件,查了 keil 的手册,关于 batch 的功能没有找到会生成 bat 文件的描述。手册对这个功能的描述是方便用户在多工程和多 project target 的情况下可指定多个工程 和 project target 一键编译,但还是要打开 keil 。

请问硬汉哥是在哪里看到的资料?我确实没找到有关 keil 生成 bat 文件的资料。[尴尬]

emwin 发表于 2023-8-29 12:59:42

MDK界面上的批处理是为了多工程一键编译,见手册《Batch Setup for Single and Multi-Projects》章节。

楼主要的是指定工程编译,有两种方式:
1.MDK命令行接口编译,见《Command Line》章节(当前楼主使用的)
2.MDK生成编译脚本,OUTPUT启用"Create batch file"即可。

----- 发表于 2023-8-29 13:25:23

一般是CI比如Jenkins系统做自动化编译使用。

个人认为Python + bat批处理足矣。

Dinor 发表于 2023-8-29 13:57:26

emwin 发表于 2023-8-29 12:59
MDK界面上的批处理是为了多工程一键编译,见手册《Batch Setup for Single and Multi-Projects》章节。

...

谢谢你提供的信息,我试了一下,确实通过勾选 Options -> Output -> Create Batch File 后编译就会生成 bat 文件。但就像你说的一样,二者之间最本质的区别就是可以指定 project target 。例如某个 template.uvprojx 工程下有两个 project target ,分别为 targetA 和 targetB ,假设你最终提交版本时停留在 targetB ,若需要编译系统编译出 targetA 的固件,这个生成的 bat 文件就行不通了。

Dinor 发表于 2023-8-29 14:12:43

----- 发表于 2023-8-29 13:25
一般是CI比如Jenkins系统做自动化编译使用。

个人认为Python + bat批处理足矣。

是的。其实 Jenkins + bat 就能做到了,一开始我也是用 bat 写的,但我想要实现工程递归搜索、参数合法性检查、参数乱序输入、编译工程指定、project target 指定、固件包搬运(只搬运编译的工程固件)以及足够全的提示信息, bat 写起来过于麻烦,遂放弃,改用我最熟悉的 C 语言。

冬日可爱 发表于 2023-8-29 15:24:14

感谢楼主分享,刚刚试了一下没问题,虽然我没这个需求但是我会记住的

abcde1224 发表于 2023-9-21 10:28:08

我在网上抄了个,包含编译、打包、上传功能,给Jenkins用的哈哈哈:lol

阿米的小粉丝 发表于 2023-9-21 14:31:15

abcde1224 发表于 2023-9-21 10:28
我在网上抄了个,包含编译、打包、上传功能,给Jenkins用的哈哈哈

方便分享一下吗
页: [1]
查看完整版本: 分享一个我开源的 keil 自动化编译脚本