プログラム内でsvnバージョン番号を動的に取得
ライン上で使用されるプログラムは、現在開発中のコードライブラリよりも古いことが多く、プログラムにバグが発生した場合、プログラムに対応するバージョンを追跡できるように、コードライブラリに対応するバージョン番号をプログラム内に記録する必要があります.この文書では、svnバージョン番号をプログラム内で動的に取得する方法について説明します.
1,Makefileでバージョン番号をversionに自動的に生成する.cpp
2,version.cppコード:
3.呼び出しコード:
3、運転結果
1,Makefileでバージョン番号をversionに自動的に生成する.cpp
app : version.o app.o
g++ -o testapp version.cpp app.cpp
force:
version.cpp: force
@$(SHELL) -ec 'sed -i "s|RELEASE_VERSION|1.1|g" version.cpp'
@$(SHELL) -ec 'sed -i "s|BUILD_OS|`uname`|g" version.cpp'
@$(SHELL) -ec 'sed -i "s|BUILD_DATE|`date +%y%m%d`|g" version.cpp'
# @$(SHELL) -ec 'sed -i "s|SVN_VERSION|1234|g" version.cpp'
@$(SHELL) -ec 'sed -i "s|SVN_VERSION|`LANG=C;LC_ALL=C;export LC_ALL;svn info .. | grep "Last Changed Rev: " | sed -e "s/Last Changed Rev: //g"`|g" version.cpp'
2,version.cppコード:
const char * g_lpszReleaseVersion = "RELEASE_VERSION";
const char * g_lpszBuildOS = "BUILD_OS";
const char * g_lpszBuildDate = "BUILD_DATE";
const char * g_lpszSvnVersion = "SVN_VERSION";
void getVersion(const stdstring & strAppName, stdstring & strVersion)
{
stdstring strReleaseVersion = g_lpszReleaseVersion;
#ifdef RELEASEVERSION
strReleaseVersion = RELEASEVERSION;
#endif
stdstring strBuildOS = g_lpszBuildOS;
#ifdef BUILDOS
strBuildOS = BUILDOS;
#endif
stdstring strBuildDate = g_lpszBuildDate;
#ifdef BUILDDATE
strBuildDate = BUILDDATE;
#endif
stdstring strSvnVersion = g_lpszSvnVersion;
#ifdef SVNVERSION
strSvnVersion = SVNVERSION;
#endif
strVersion = FormatString("% version %(Build %-%[%])").arg(strAppName).arg(strReleaseVersion)
.arg(strBuildOS).arg(strBuildDate).arg(strSvnVersion).str();
}
3.呼び出しコード:
extern void getVersion(const stdstring & strAppName, stdstring & strVersion);
stdstring strVersion;
getVersion("testapp", strVersion);
std::cout << strVersion << std::endl;
3、運転結果
testapp version 1.1(Build Linux-120909[2292])