在应用程序版本中使用svn版本号

fdu*_*uff 8 c++ svn continuous-integration visual-studio-2010

在VS2010解决方案(不是.NET)中,我希望将svn修订版号作为应用程序版本的一部分.

我们目前不使用makefile,只有VS解决方案/项目设置.

我想在编译时获取工作副本修订号,将其存储到变量中,以便稍后可以在代码中使用它来显示版本号.

到目前为止,我已经成功地svnversion将最新版本的工作副本作为预建事件获取.

"C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
Run Code Online (Sandbox Code Playgroud)

在构建时,我可以看到正确的修订号返回到output控制台.

现在,问题是,如何将此值存储到可在代码中使用的变量中?

我已经尝试定义一个预编译变量(_SVNREV)并使用它直接从pre-build事件框保存上面cmd的结果,但这不起作用.

_SVNREV="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
%_SVNREV%="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
%_SVNREV="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
$(_SVNREV)="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
Run Code Online (Sandbox Code Playgroud)

这些都不起作用.

解决方案:我无法尝试从VS env中更新变量.所以我采用了另一种方法,将脚本称为预构建步骤,获取工作副本的svn修订版,然后创建包含该信息的头文件.

这是svnrev.bat对任何感兴趣的人:

@echo off
set cmd="C:\"Program Files\CollabNet\Subversion Client"\svnversion.exe -n %1 "
set versionfile=%1/version.h
FOR /F %%i IN ('%cmd%') DO SET SVNVER=%%i

echo Detected program revision %SVNVER% in %1
echo #pragma once > %versionfile%
echo #define _SVNVER "%SVNVER%" >> %versionfile%
Run Code Online (Sandbox Code Playgroud)

uml*_*ute 5

到目前为止我想出的最好的猜测是在包含svnversion的预构建事件中生成头文件.

例如,我创建一个批处理脚本version.bat:

@echo off
FOR /F "tokens=*" %%i IN ('call svnversion') DO echo #define SVNVERSION "%%i" > svnversion.h
Run Code Online (Sandbox Code Playgroud)

无论我想在哪里获得svnversion,我都是 #include "svnversion.h"