在程序内动态获取svn版本号

生产线上使用的程序往往比当前正在开发的代码库旧,当程序出现bug时,为了可以追踪到程序对应的版本,需要在程序内记录代码库对应的版本号。本文说明怎么在程序内动态获取svn版本号。

1,在Makefile自动生成版本号到version.cpp

app : version.o app.o
g++ -o testapp version.cpp app.cpp

force:

version.cpp: force
@$(SHELL) -ec 'sed -i "s|RELEASE_VERSION|1.1|g" version.cpp'
@$(SHELL) -ec 'sed -i "s|BUILD_OS|`uname`|g" version.cpp'
@$(SHELL) -ec 'sed -i "s|BUILD_DATE|`date +%y%m%d`|g" version.cpp'
# @$(SHELL) -ec 'sed -i "s|SVN_VERSION|1234|g" version.cpp'
@$(SHELL) -ec 'sed -i "s|SVN_VERSION|`LANG=C;LC_ALL=C;export LC_ALL;svn info .. | grep "Last Changed Rev: " | sed -e "s/Last Changed Rev: //g"`|g" version.cpp'



2,version.cpp代码:

const char * g_lpszReleaseVersion = "RELEASE_VERSION";
const char * g_lpszBuildOS = "BUILD_OS";
const char * g_lpszBuildDate = "BUILD_DATE";
const char * g_lpszSvnVersion = "SVN_VERSION";

void getVersion(const stdstring & strAppName, stdstring & strVersion)
{
stdstring strReleaseVersion = g_lpszReleaseVersion;
#ifdef RELEASEVERSION
strReleaseVersion = RELEASEVERSION;
#endif

stdstring strBuildOS = g_lpszBuildOS;
#ifdef BUILDOS
strBuildOS = BUILDOS;
#endif

stdstring strBuildDate = g_lpszBuildDate;
#ifdef BUILDDATE
strBuildDate = BUILDDATE;
#endif

stdstring strSvnVersion = g_lpszSvnVersion;
#ifdef SVNVERSION
strSvnVersion = SVNVERSION;
#endif

strVersion = FormatString("% version %(Build %-%[%])").arg(strAppName).arg(strReleaseVersion)
.arg(strBuildOS).arg(strBuildDate).arg(strSvnVersion).str();
}


3. 调用代码:

extern void getVersion(const stdstring & strAppName, stdstring & strVersion);

stdstring strVersion;
getVersion("testapp", strVersion);
std::cout << strVersion << std::endl;


3,运行结果

testapp version 1.1(Build Linux-120909[2292])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值