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)
到目前为止我想出的最好的猜测是在包含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"