VS2010 ソリューション (.NET ではない) では、アプリケーション バージョンの一部として svn リビジョン番号を含めようとしています。
現時点ではメイクファイルは使用せず、VS ソリューション/プロジェクト設定のみを使用します。
コンパイル時に作業コピーのリビジョン番号を取得し、それを変数に格納して、後でコード内で使用してバージョン番号を表示できるようにしたいと考えています。
これまでのところ、svnversion
作業コピーの最新バージョンをpre-built eventとして取得することに成功しました。
"C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
ビルド時に、正しいリビジョン番号がoutput
コンソールに返されていることがわかります。
問題は、この値をコード内で使用できる変数にどのように格納できるかということです。
プリコンパイラ変数 ( ) を定義し、それを使用して上記のコマンドの結果をイベント ボックス_SVNREV
から直接保存しようとしましたが、うまくいきません。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 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%