在我们的 C/C++ 项目中,我们混合了两种不同的方法:
1/ Make 将 subwcrev 与输入文件一起使用:version_info.src 生成包含文件 version_info.inc - 这包含在我们的代码中。
static cstring_t LastCommitDate = "@(#)SVN Info: Highest Commit Date $WCDATE=%H:%M %a %d-%b-%Y$";
static cstring_t InfoGenerated = "@(#)SVN Info: Generated $WCNOW=%H:%M %a %d-%b-%Y$";
static cstring_t VersionRange = "@(#)SVN Info: Built From Revision $WCRANGE$";
static cstring_t MixStatus = "@(#)SVN Info: $WCMIXED?Mixed:Single$ Revision";
static cstring_t ModStatus = "@(#)SVN Info: $WCMODS?Has:No$ Local Modifications";
#define CURRENT_REV_NUMBER $WCMIXED?0xffff:((uint16_t)$WCRANGE$)$
$WCMIXED?#define _MIXED_REV_BUILD_:$
$WCMODS?#define _BUILD_INCLUDES_MODIFICATIONS_:$
#ifdef _DEBUG_
#else
$WCMODS?#error *** SVN - Local Modifications Are NOT Permitted Within A Release Build! ***:/* SVN - OK for Release No Local Modifications */$
$WCMIXED?#error *** SVN - Mixed Revisions Are NOT Permitted Within A Release Build! Please Run a svn update!***:/* SVN - OK for Release Single Revision */$
#endif
这包括我们的版本信息,不会让我们使用修改后的代码进行发布构建。
2/ 在我们的一些项目中,我们使用 python 和构建脚本中的 svn 绑定来生成包含文件所需的版本信息。这更强大,因为它可以检查构建使用但尚未添加到存储库中的文件是否存在。