利用svn和Makefile实现二进制的自动版本管理

利用svn和Makefile实现二进制的自动版本管理

工程项目中,二进制版本管理是个常见的问题,大多在Makefile里增加相应参数,写入版本号;
二进制文件实现时,支持-v参数,可将版本号显示出来,方便检查版本。
而这个版本号,每次升级时都由工程师手工写入,例如修改Makefile中的如下参数:

VERSION=-D__VERSION_ID__="\"1.3.1.0

以便check二进制时,比对版本号。

不爽之处
每次都需要手动修改Makefile,如果忘了修改,对应版本号错误,导致二进制-v命令显示错误版本号。

改进思想
svn编译机只认tag(不认chunk和branch),即编译机是从类似

http://svn.google.com/code/module/tags/helloworld/helloworld_1-3-1-0_PD_BL

某个这样的URL处获取代码,并执行编译,而这个tag里面已经包含了版本信息

改进实施
将Makefile中每次需要手填的固定版本号改为:

SVN_VERSION=`svn info |\
    grep URL |\
    cut -d" " -f2 |\
    xargs basename |\
    awk -F_ '{print $$2}' |\
    sed 's/-/./g'`
VERSION=-D__VERSION_ID__="\"${SVN_VERSION}

详细说明
(1)svn info:显示svn的tag路径,即
URL http://svn.google.com/code/module/tags/helloworld/helloworld_1-3-1-0_PD_BL
(2)grep URL:获取URL http://svn.google.com/code/module/tags/helloworld/helloworld_1-3-1-0_PD_BL这一行
(3)cut -d” ” -f2:去掉“URL”获取路径,即http://svn.google.com/code/module/tags/helloworld/helloworld_1-3-1-0_PD_BL
(4)xargs basename:获取basenmae,即helloworld_1-3-1-0_PD_BL
(5)awk -F_ ‘{print $$2}’:获取中间部分版本号信息1-3-1-0
(6)sed ‘s/-/./g’:提换成1.3.1.0
如果svn、grep、cut、xargs、awk、sed使用有疑问,可google一下手册。

进一步改进
将以上代码放入一个类似Makefile.public中,由各个Makefile去include,以实现代码重用

每天把代码改进一点点,世界就美好一点点。

评论关闭。