使用Visual Studio 2008和SVN在C ++中进行自动转换

时间:2014-01-02 15:18:57

标签: c++ svn visual-c++ visual-studio-2008 version

我正在使用MS Visual Studio 2008在C ++中进行一些开发工作,目前我们有一个版本函数,它返回一个代表版本号的硬编码字符串。我想找出一种方法,这样它可以从1开始,而不是硬编码的数字,每次我进行调试或发布版本时都会增加1(或者甚至更好,跟踪调试版本和发布版本号)。或者,如果无法做到这一点,请使用当前日期/时间作为版本号。

请注意,因为有几个人正在处理项目并使用SVN,所以代码必须与计算机无关(这意味着如果我目前使用的是版本100,我的同事的最后版本是90版,那么下一个版本时间(在我检查代码并且我的同事拿出代码之后),他下一次编译的版本号应该是101而不是91.)

你能帮忙吗?

2 个答案:

答案 0 :(得分:6)

如果您使用TortoiseSVN,可以在预构建事件中使用subwcrev.exe将当前修订号写入源文件。

因此,请检查文件version.template.hpp并添加类似

的内容
  const string version = "13.12.0.$WCREV$";

添加项目预构建事件

subwcrev.exe "$(SolutionDir)." "$(ProjectDir)version.template.hpp" 
             "$(ProjectDir)version.hpp"

并包含生成的文件#include "version.hpp"

答案 1 :(得分:2)

如果您想在构建解决方案(调试,发布或两者)时自动执行操作,Visual Studio可以使用自定义构建事件/步骤来启动程序或脚本以执行任何操作。 hansmaad的答案可能并不完全是你想要的,因为没有“每个构建的自动增量”,而是我认为这个想法是将SVN的某个文件的版本号放入编译进来的源文件中。这使得对我来说很有意义,因为它允许你将构建绑定到SVN中的某个源快照。

我认为合并这两个想法(自动构建增量和源代码控制版本文件)有点问题......当两个开发人员从版本X开始并且构建并将版本更新为X + 1时会发生什么?提交时应优先考虑哪一个。我认为它会最后承诺他们的改变,但在我看来,这没有任何意义。换句话说,我的机器上的版本Y与我的同事机器上的版本Y不同。

让我更有意义的是,发布过程会使用自动递增版本标记构建,而不是让每个开发人员的构建都自动增加。