VCはコンパイル時間をバージョン番号として識別する方法

2881 ワード

一般的な方法は2つのステップに分かれています.
1.コンパイル時間を得る;
2.基準時間を設定し、コンパイル時間から基準時間までの総日数の2倍をバージョン番号とし、適宜初値を加えることもできる.
最初のステップの実装には、次の2つの方法があります.
1.システムマクロを直接使用する:CString OcxTime = __DATE__;.コンパイルオプションのPre-link Stepでバッチファイルを呼び出す.bat:

@echo off
echo #pragma once>"Ver.h"
echo #define APP_VER_NUM  "%data%">>"Ver.h"

その他のネットユーザーの補足
マクロの使用DATE__および_TIME__

CString strVersion,strBuildTime; 
strBuildTime = __DATE__; 
strBuildTime.Append(" "); 
strBuildTime.Append(__TIME__); 
COleVariant vtime(strBuildTime); 
vtime.ChangeType(VT_DATE); 
COleDateTime dateTime=vtime; 
SYSTEMTIME systime; 
VariantTimeToSystemTime(dateTime, &systime); 
CTime buildTime(systime); 
strVersion = buildTime.Format(" Builded %Y-%m-%d %H:%M:%S "); 

it夢の同級生の補充
一般的に、公開された正式なソフトウェアには、プログラムのsvnバージョン番号やソフトウェアのコンパイルバージョンやコンパイル時間などの情報が含まれていますが、これらはデフォルトでは存在せず、いくつかのステップの処理が必要です.具体的な方法はいくつかありますが、SVNが持っている命令でバージョン番号と現在の時間を取得し、テンプレートの中のプレースホルダを埋め、最後に置き換えたテンプレートでリソースファイルを上書きすればいいです.ここでは最も簡単な1つだけを述べる:a.まずVCプログラムにリソースファイルを追加する必要があり、プログラム名がTestであると仮定すると、リソースファイルはTestである.rc b.リソースファイルに新しいリソース項目――versionを追加し、リソースファイルは手帳で開き、以下のコードを追加した.

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "080404b0"
    BEGIN
      VALUE "FileDescription", "Test"
      VALUE "FileVersion", "1, 1, 1, 0"
      VALUE "InternalName", "Test"
      VALUE "LegalCopyright", "Copyright (C) 2015"
      VALUE "OriginalFilename", "Test.exe"
      VALUE "ProductName", "Microsoft"
      VALUE "ProductVersion", "V1.0"
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x804, 1200
  END
END

c.次にテンプレートを作成し、SVNが提供するプレースホルダWCREMを利用してバージョン番号を取得し、WCNOWはコンパイル時間を取得する.テンプレートは直接コピーできます.rcファイル、Testに名前を変更します.rc2.上記のコードのProductVersionの値を変更します.

VALUE "ProductVersion", "V2.1.1.$WCREV$.(Build$WCNOW$)"

d.では、いつプレースホルダの置換を行い、プログラムのリソースファイルTestを置換.rc、バージョン番号とコンパイル時間を正確にプログラムにコンパイルしますか?VSはBuild Events構成を提供し、Pre-Build Eventを選択し、次のコードを1行追加します.

SubWCRev $(ProjectDir) $(ProjectDir)\Test.rc2 $(ProjectDir)\Test.rc

コードとは、プログラムのコンパイル前に、SVNのスクリプトツールSubWCRevでプロジェクトディレクトリのSVN番号と現在のコンパイル時間を取得し、rc 2ファイルのプレースホルダを置き換えてrcファイルに上書きすることを意味します.