在 VS2010 解决方案(不是 .NET)中,我希望将 svn 修订号作为应用程序版本的一部分。
我们目前不使用 makefile,仅使用 VS 解决方案/项目设置。
我想在编译时获取工作副本修订号,将其存储到一个变量中,以便稍后在代码中使用它来显示版本号。
到目前为止,我已经成功地用来svnversion
获取最新版本的工作副本作为预建事件。
"C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
在构建时,我可以看到正确的修订号返回到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)
这些都不起作用。
解决方案:我无处可去,试图从 VS 环境中更新变量。所以我采取了另一条路线,调用脚本作为预构建步骤,获取工作副本的 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%