VCはコンパイル時間をバージョン番号として識別する方法
2881 ワード
一般的な方法は2つのステップに分かれています.
1.コンパイル時間を得る;
2.基準時間を設定し、コンパイル時間から基準時間までの総日数の2倍をバージョン番号とし、適宜初値を加えることもできる.
最初のステップの実装には、次の2つの方法があります.
1.システムマクロを直接使用する:
その他のネットユーザーの補足
マクロの使用DATE__および_TIME__
it夢の同級生の補充
一般的に、公開された正式なソフトウェアには、プログラムのsvnバージョン番号やソフトウェアのコンパイルバージョンやコンパイル時間などの情報が含まれていますが、これらはデフォルトでは存在せず、いくつかのステップの処理が必要です.具体的な方法はいくつかありますが、SVNが持っている命令でバージョン番号と現在の時間を取得し、テンプレートの中のプレースホルダを埋め、最後に置き換えたテンプレートでリソースファイルを上書きすればいいです.ここでは最も簡単な1つだけを述べる:a.まずVCプログラムにリソースファイルを追加する必要があり、プログラム名がTestであると仮定すると、リソースファイルはTestである.rc b.リソースファイルに新しいリソース項目――versionを追加し、リソースファイルは手帳で開き、以下のコードを追加した.
c.次にテンプレートを作成し、SVNが提供するプレースホルダWCREMを利用してバージョン番号を取得し、WCNOWはコンパイル時間を取得する.テンプレートは直接コピーできます.rcファイル、Testに名前を変更します.rc2.上記のコードのProductVersionの値を変更します.
d.では、いつプレースホルダの置換を行い、プログラムのリソースファイルTestを置換.rc、バージョン番号とコンパイル時間を正確にプログラムにコンパイルしますか?VSはBuild Events構成を提供し、Pre-Build Eventを選択し、次のコードを1行追加します.
コードとは、プログラムのコンパイル前に、SVNのスクリプトツールSubWCRevでプロジェクトディレクトリのSVN番号と現在のコンパイル時間を取得し、rc 2ファイルのプレースホルダを置き換えてrcファイルに上書きすることを意味します.
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ファイルに上書きすることを意味します.