开发过程中,有时候会很频繁的发版本出来做测试,每次编译后都得手动去改烧录文件的名字,还是很烦人的,明明在原文件里有定义了,还得手动再改一遍。就想着能自动化点,在源文件里改了,编译出来就能得到想要的,因此就有了这个脚本。
需要说明的是,这不是一个很通用的脚本,因为是对我自己使用的版本命名方式去做的。如果对自己有用的话,可以在我这个的基础上改,也就几行代码的事。脚本可以到我的github仓库上下载,在首页的“个人介绍”那点击蓝色小房子就可以跳转过去。
实现这个功能有两个文件要用到version.h
、autoversionname.py
。前者是我自己的版本名字管理文件,主要内容如下
#define PRE_RELEASE "release"
#define BUILD "1559717577"
/* major minor patch */
#define VERSION_CORE "1.0.0"
#if defined(VERSION_CORE)
#if defined(PRE_RELEASE) && defined(BUILD)
#define SW_VESION VERSION_CORE"-"PRE_RELEASE"+"BUILD
#elif defined(PRE_RELEASE)
#define SW_VESION VERSION_CORE"-"PRE_RELEASE
#elif defined(BUILD)
#define SW_VESION VERSION_CORE"+"BUILD
#else
#define SW_VESION VERSION_CORE
这个版本格式是Semantic Versioning 2.0.0,有兴趣可以看看。下面说使用方法:
1、将version.h
、autoversionname.py
复制到工程目录下,并将version.h
添加到工程里(我需要在程序运行的时候打印版本号);
2、在IDE里设置脚本执行命令,具体看图示:
-
IAR
-
MDK
图中的命令格式有几点要注意:
- 1、python需要添加到系统环境变量里,否则会提示找不到;
- 2、
version.h
、autoversionname.py
没用绝对路径是因为我将这两个文件放到了工程文件的同一目录下,如果不是放这里,需要使用绝对路径。
设置好后,在工程编译结束的时候就会执行这个脚本,脚本会解析version.h
得到版本号,然后自动找到烧录文件并将它重命名。效果如下图:
To Do
根据Semantic Versioning 2.0.0,build metadata是动态生成的,一般是时间戳、烧录文件的哈希值啥的。目前没有去实现这一块,因为我暂时用不到。要做的话,需要再另外写一个脚本,在编译开始前去执行,生成需要的build metadata并写到version.h
中的#define BUILD
处。
网友评论