C++ 自动版本编号

C++ 自动版本编号,c++,svn,version-control,netbeans,C++,Svn,Version Control,Netbeans,我正在向可执行文件添加一个功能,以使用--version参数运行它。这个项目非常大,使用多个类。我想打印出所有课程的版本 现在,我的每个类都有一个函数static void print_info(){cout您可以在源文件上使用subversionRevision属性,该属性激活文件中的$Revision$关键字替换 string version = "$Revision:$"; 如果您想这样做,我会在每个源文件请求时使用一个#define,并使用文件的最后修改日期更新它(使用$date:$或

我正在向可执行文件添加一个功能,以使用--version参数运行它。这个项目非常大,使用多个类。我想打印出所有课程的版本


现在,我的每个类都有一个函数
static void print_info(){cout您可以在源文件上使用subversion
Revision
属性,该属性激活文件中的
$Revision$
关键字替换

string version = "$Revision:$";

如果您想这样做,我会在每个源文件请求时使用一个
#define
,并使用文件的最后修改日期更新它(使用$date:$或使用您自己的脚本更新)。然后您可以使用print_info()中定义的常量非常简单。

首先,我建议你做一些事情,而不是打印信息()
方法,因为它不是很灵活-如果您希望实际使用版本而不是简单地将其打印到STDOUT,或者如果您希望在错误消息中向STDERR报告版本,该怎么办?返回常量字符字符串的
静态
方法将更通用

关于版本号的选择,您当然可以使用SVN关键字,这些关键字可以放在代码主体中

char[] versionString = "commit revision $Rev$";
并已启用相应的关键字替换
svn propset svn:keywords“Rev”file.cpp,下次执行更新时,svn客户端将更新文本,如下所示

char[] versionString = "commit revision $Rev: 12 $";
下次提交时,该字符串将被覆盖为新的正确字符串,例如

char[] versionString = "commit revision $Rev: 13 $";

如果你很好地使用SVN,你应该进行分支和标记,在这种情况下,分支和标记信息(构成
$URL$
关键字的一部分)要包含在版本字符串中的有用内容。
$Revision$
还可以为您提供在更新之间更改的值。但请记住,关键字仅在执行更新(签出、提交等)时更新。如果您对代码进行更改,然后对其进行编译,则报告的
$Revision$
将与您最初签出代码时相同。据我所知,避免被发现的唯一方法是在编译软件的新版本之前,采用执行代码提交的过程-如果您可以将它与SVN中的发布标记过程结合起来。

看起来我将使用$Id$。谢谢!@Mikhail:看起来您删除了您提出的问题,因为我正在回答,但是是的,每次替换的字符串都会被正确的数据覆盖。我更新了我的答案以进行演示。请注意,对于静态字符串de>const char*
string可能比
std::string更好-请参阅中的讨论