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

2024-05-01

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

我们目前不使用 makefile,仅使用 VS 解决方案/项目设置。

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

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

"C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)

在构建时,我可以看到正确的修订号返回到output安慰。

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

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

_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%

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在应用程序版本中使用 svn 修订号 的相关文章

随机推荐