生产线上使用的程序往往比当前正在开发的代码库旧,当程序出现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])
分享到:
相关推荐
本文将深入探讨如何获取svn的最新版本号,并介绍一些常用的svn命令。 首先,获取svn的最新版本号通常是为了确保你正在使用的代码是最新的,避免因版本过旧而遇到已解决的问题或错过新功能。有几种方法可以获取: 1...
1. **获取SVN版本信息**:你可以使用SVN命令行工具(如`svn info`)来获取项目当前的版本号。这个命令会返回包括URL、修订版本号、作者等在内的多种信息。 2. **脚本化过程**:为了自动化这个过程,你可以编写一个...
2. **获取SVN版本信息**:利用SVN插件提供的API或者通过执行SVN命令行工具,可以获取当前代码库的最新版本号。例如,`svn info`命令会返回包含版本号的信息。 3. **自定义MSBuild脚本**:VS使用MSBuild作为其构建...
在VS项目中获取SVN版本号,一般有两种常见方法: 1. **使用预构建事件命令**:在项目的属性页中,我们可以设置预构建事件命令行。这里可以添加一个批处理脚本,该脚本调用SVN命令行工具(如`svn info`),获取仓库...
在我们的案例中,Zabbix将作为监控平台,通过自定义的监控项(key)来获取SVN版本信息。 1. **在Zabbix定义一个key**:在Zabbix中,每个监控项都有一个独特的key,用于标识和收集特定的数据。在描述中提到的`svn...
Linux 编译期加入编译时间和 SVN 版本号是非常重要的功能,特别是在程序开发时需要频繁地编译和更新代码。下面我们将详细介绍如何在 Linux 编译期加入编译时间和 SVN 版本号。 加入编译时间的方法 加入编译时间有...
标题和描述中提到的“自动获取svn代码并且编译发布”是一种常见的持续集成(CI)实践,它涉及自动化从版本控制系统获取源代码、构建应用程序、并进行发布的过程。以下是这个流程涉及的关键知识点: 1. **Subversion ...
标题中的“VS2008插件SVN修改版本号”指的是一个针对Visual Studio 2008(VS2008)开发的插件,该插件的主要功能是在编译过程中自动更新RC资源文件中的版本信息。RC资源文件是Windows应用程序中用于存储用户界面元素...
同样,版本号与主安装程序相同,意味着语言包与主程序兼容,确保所有功能都能正常显示和使用。 安装这两个MSI文件的步骤通常是先安装`TortoiseSVN_1.8.8.25755_x64.msi`,然后根据需要安装`LanguagePack_1.8.8....
假设 A、B 两个用户都在版本号为 100 的时候,修改了 kingtuns.txt 这个文件,A 用户在修改完成之后提交 kingtuns.txt 到服务器,这个时候提交成功,这个时候 kingtuns.txt 文件的版本号已经变成 101 了。...
标题中的"SVN版本控制器 + 语言安装包 (Win)"指的是包含了SVN版本控制器的TortoiseSVN客户端以及语言包,适合在Windows操作系统上使用。TortoiseSVN的版本号为1.11.1,构建号为28492,且是64位版本。语言包则是...
火龙果软件工程技术中心 在《介绍一下SVN》一文中,我提到了自动递增版本号的功能,现在就来具体说明一下实现方法。虽然标题中说的是“使用SVN”,但我们实际用的是SVN的客户端工具TortoiseSVN中的SubWCRev程序。...
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理对文件和目录的修改历史。它允许用户协同工作,跟踪文件的变化,并恢复过去的版本。在使用SVN时,通常需要设置用户名和密码以便验证身份,确保只有授权的...
### SVN版本控制系统详解 #### 一、SVN简介与核心概念 版本控制系统是软件开发过程中不可或缺的工具之一,它能够帮助团队有效地管理源代码的变化历史,实现多人协作下的代码版本同步与冲突解决。Subversion(简称...
使用这类工具,用户可以创建一个包含所需文件名和对应版本号的列表,然后工具会自动处理剩下的工作,这样既提高了效率,也减少了出错的可能性。此外,这样的工具可能还具备其他高级功能,比如批量导出、版本对比、...
3. **版本(Revision)**:每次提交都会增加一个新的版本号,记录下每次修改的内容。 4. **提交(Commit)**:将本地工作副本的更改上传到仓库,会创建一个新的版本。 5. **更新(Update)**:获取仓库中的最新...
TortoiseSVN-1.3.3.6219-svn-1.3.1.msi是这个客户端的安装文件,版本号为1.3.3,表明它是2007年左右发布的较早版本。 使用SVN进行版本控制有以下关键操作: 1. **Checkout**:从仓库获取最新的工作副本,这是开始...
版本号的提升通常意味着修复了已知问题、提升了性能或添加了新功能。在3.6系列中,可能包括对客户端和服务器端的改进,比如增强的安全性、更高效的冲突解决机制以及对大文件和分支操作的优化。不过,没有提供具体的...
总结起来,“TSvnPwd-svn查看本地账密信息程序(windows版本)”是一个实用工具,它解决了在Windows环境下SVN用户忘记密码的问题。通过运行TSvnPwd.exe,用户可以轻松获取被系统保存的SVN认证信息,有效地提高了工作...
在keil上使用SVCS教程,keil的TortoiseSVN版本控制,TortoiseSVN服务器配置 在keil上使用SVCS服务器与本地使用教程整理 链接: https://pan.baidu.com/s/1aPQyNEmGdSLzrP5_ckT88A 提取码: aeff 复制这段内容后打开...