利用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,以实现代码重用
每天把代码改进一点点,世界就美好一点点。
评论关闭。