民间,
我正在使用VS2010并尝试使用SubWCRev将我的项目的构建版本与我的Subversion存储库同步。这一切都正常,但我不能完全理解一件事。我的模板文件由以下内容组成:
#define MAJOR_VERSION 2
#define MINOR_VERSION 2
#define MICRO_VERSION 0
#define BUILD_VERSION $WCMODS?$WCREV$+1:$WCREV$$
#define QUOTE_(x) #x
#define QUOTE(x) QUOTE_(x)
#define BUILD_VERSION_STRING QUOTE(MAJOR_VERSION.MINOR_VERSION.MICRO_VERSION.BUILD_VERSION)
然后在我的应用程序.RC文件中我有:
FILEVERSION MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_VERSION
PRODUCTVERSION MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_VERSION
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080004e4"
BEGIN
VALUE "FileVersion", BUILD_VERSION_STRING
VALUE "ProductVersion", BUILD_VERSION_STRING
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x800, 1252
END
END
正如你可以解决的那样,如果有修改过的代码,我试图将构建版本提高1,这样当我发布版本并检查代码时,EXE中的构建版本将与Subversion版本号匹配。问题是BUILD_VERSION扩展到x + 1或x + 0,然后在BUILD_VERSION_STRING中显示为“2.2.0.227 + 1”,这不是我想要的。
对此有更多经验的人是否知道实现目标的方法? 提前致谢
答案 0 :(得分:1)
#define BUILD_VERSION $WCMODS?$WCREV+1$:$WCREV$$
答案 1 :(得分:0)
你可以这样做:
#define MOD_VERSION $WCMODS?1:0$
#define REVISION $WCREV$
#define BUILD_VERSION ( REVISION + MOD_VERSION )
编辑:这不会像评论中指出的那样有效!
您的版本号的目的是什么?如果要回到用于生成二进制文件的源代码那么你可能会在这里拍摄自己的脚。如果有人在您创建版本号的同时将更多代码检入存储库,会发生什么?您将最终得到引用不同代码的二进制文件。
最好的方法是检查工作副本是否有任何修改或混合修订,并使用特定的修订号(例如0xFFFFFFFF
或0
)来表示这一点。如果您使用干净的树来构建二进制文件,则仅使用真正的修订版号。
#define MAJOR_VERSION 2
#define MINOR_VERSION 2
#define MICRO_VERSION 0
#if $WCMODS?1:0$
#define BUILD_VERSION 0
#else
#define BUILD_VERSION $WCREV$
#endif
答案 2 :(得分:0)
在我的小组中,我们只使用项目工作目录的svn修订号自动更新最低有效值。为此,我们为每个项目添加了一个预构建步骤,该项目创建并调用执行以下操作的批处理脚本:
答案 3 :(得分:0)
如果您使用subwcrev从版本化模板生成无版本标头,则<{1}} 未版本化标头位于< em> versioned .RC文件,您可以构建从未修改的工作区域发布。
然后你可以使用
#include
这也消除了在构建发行版EXE和签入代码之间发生任何变化的风险。