硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1698|回复: 11
收起左侧

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

  [复制链接]

4

主题

129

回帖

146

积分

初级会员

积分
146
发表于 2023-8-29 09:41:48 | 显示全部楼层 |阅读模式
Keil-Autopiler v1.0

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

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

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


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-8-29 10:19:36 | 显示全部楼层
MDK自带了一个批处理的功能,建立后,可以随意修改使用


QQ截图20230829102040.png

回复

使用道具 举报

4

主题

129

回帖

146

积分

初级会员

积分
146
 楼主| 发表于 2023-8-29 10:38:27 | 显示全部楼层
eric2013 发表于 2023-8-29 10:19
MDK自带了一个批处理的功能,建立后,可以随意修改使用

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-8-29 10:54:50 | 显示全部楼层
Dinor 发表于 2023-8-29 10:38
功能不一样,这个脚本的目的是为了给别的程序调用的,而且不能打开 keil 软件。

这个批处理一样的,生成一次之后,就不需要用户再打开MDK了,批处理文件里面生成了各种编译链接信息,头文件路径信息等。需要运行,点击这个批处理文件就行。
回复

使用道具 举报

4

主题

129

回帖

146

积分

初级会员

积分
146
 楼主| 发表于 2023-8-29 11:06:33 | 显示全部楼层
eric2013 发表于 2023-8-29 10:54
这个批处理一样的,生成一次之后,就不需要用户再打开MDK了,批处理文件里面生成了各种编译链接信息,头 ...

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

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

使用道具 举报

210

主题

1042

回帖

1682

积分

至尊会员

More we do, more we can do.

积分
1682
发表于 2023-8-29 12:59:42 | 显示全部楼层
MDK界面上的批处理是为了多工程一键编译,见手册《Batch Setup for Single and Multi-Projects》章节。

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

使用道具 举报

1

主题

109

回帖

112

积分

初级会员

固件開發工程師

积分
112
QQ
发表于 2023-8-29 13:25:23 | 显示全部楼层
一般是CI比如Jenkins系统做自动化编译使用。

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

使用道具 举报

4

主题

129

回帖

146

积分

初级会员

积分
146
 楼主| 发表于 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 文件就行不通了。
回复

使用道具 举报

4

主题

129

回帖

146

积分

初级会员

积分
146
 楼主| 发表于 2023-8-29 14:12:43 | 显示全部楼层
----- 发表于 2023-8-29 13:25
一般是CI比如Jenkins系统做自动化编译使用。

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

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

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2023-8-29 15:24:14 | 显示全部楼层
感谢楼主分享,刚刚试了一下没问题,虽然我没这个需求但是我会记住的
回复

使用道具 举报

7

主题

190

回帖

216

积分

高级会员

积分
216
发表于 2023-9-21 10:28:08 | 显示全部楼层
我在网上抄了个,包含编译、打包、上传功能,给Jenkins用的哈哈哈
回复

使用道具 举报

17

主题

29

回帖

85

积分

初级会员

积分
85
发表于 2023-9-21 14:31:15 | 显示全部楼层
abcde1224 发表于 2023-9-21 10:28
我在网上抄了个,包含编译、打包、上传功能,给Jenkins用的哈哈哈

方便分享一下吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 13:38 , Processed in 0.257960 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表