在应用程序版本中使用svn修订号
use svn revision number in application version
在VS2010解决方案(而不是.NET)中,我希望将svn修订号作为应用程序版本的一部分。
我们目前不使用makefile,只使用VS解决方案/项目设置。
我想在编译时获得工作副本的修订号,将其存储到一个变量中,以便稍后在代码中使用它来显示版本号。
到目前为止,我已经成功地使用svnversion
作为预构建事件获得了工作副本的最新版本。
"C:Program FilesCollabNetSubversion Clientsvnversion.exe" -n $(SolutionDir)
在构建时,我可以看到正确的修订号返回到output
控制台中。
现在的问题是,如何将这个值存储到可以在代码中使用的变量中?
我尝试定义一个预编译器变量(_SVNREV
),并使用它直接从pre-build
事件框保存上面cmd的结果,但这不起作用。
_SVNREV="C:Program FilesCollabNetSubversion Clientsvnversion.exe" -n $(SolutionDir)
%_SVNREV%="C:Program FilesCollabNetSubversion Clientsvnversion.exe" -n $(SolutionDir)
%_SVNREV="C:Program FilesCollabNetSubversion Clientsvnversion.exe" -n $(SolutionDir)
$(_SVNREV)="C:Program FilesCollabNetSubversion Clientsvnversion.exe" -n $(SolutionDir)
这些都不起作用。
解决方案:我试图从VS环境中更新一个变量,但没有去任何地方。所以我采取了另一种方法,调用一个脚本作为预构建步骤,获取工作副本的svn修订版,然后创建一个包含该信息的头文件。
以下是感兴趣的人的svnrev.bat
:
@echo off
set cmd="C:"Program FilesCollabNetSubversion 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
无论我想在哪里获得sversion,我只需#include "svnversion.h"
如果您正在进行构建,您应该有一个标准的构建系统。我建议使用詹金斯。它是开源的,并且易于使用。
詹金斯的一个巧妙技巧是插入一些不错的环境变量供您使用:
- SVN_REVISION-子版本修订号
- BUILD_NUMBER-Jenkins中的内部版本号
- JOB_NAME-Jenkins中的作业名称
一旦您开始在构建中使用Jenkins,后两个环境变量可能会比Subversion修订版本身更有价值,因为后两个变量会将您的代码链接回项目和各种好的信息。
Jenkins是一个持续构建引擎。无论何时结账,或者在一天中的特定时间,您都可以设置Jenkins作业以基于命令进行构建。您甚至可以通过URL上的wget发送构建命令。
通过使用构建服务器,可以消除特定系统的配置对构建产生某种副作用的可能性。生成服务器是一个已知的配置,将生成官方生成。
这比你可能想知道的要多一些。(具体来说,您可以使用svnversion
命令来检索修订号,然后从那里继续)。但是,它将大大改进您的构建过程。
您可以运行包装在批处理文件中的命令。Batch文件可以生成一个类似version.h的头文件,其中包含以下版本字符串:
#define SVN_REV 12345
批处理脚本会回显"#define SVN_REV"。SVN rev来自您所拥有的命令。
现在,您可以在代码中包含此标头,并根据需要使用#define。
我见过有人解析svn信息以获取版本号,并将其写入一个文件,然后设置compile以将文件拖入编译后的代码中。
SVN的诀窍:在旧版本中(每个子目录中都有一个.SVN文件),版本号只能保证对项目根目录是正确的。任何其他目录都将带有该子树中最后一次提交的版本号。我不知道你用的是什么版本,但如果你是一对情侣,请注意!
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?
- 在应用程序版本中使用svn修订号
- 在 c++ Visual Studio 应用程序中获取当前 svn 修订版的简单方法
- 在编译时在 Windows 应用程序中嵌入 SVN 修订号