在构建时更改版本号

时间:2013-01-09 18:26:50

标签: delphi ide version

我需要将delphi项目的版本设置为与另一个项目(不是delphi)相同,作为构建脚本的一部分。有没有办法控制版本号而不通过IDE,例如编译器的命令行参数或类似的东西?感谢

2 个答案:

答案 0 :(得分:12)

包含类似

的行
{$R 'version.res'}

在你的项目中。并使用您的版本信息创建一个version.rc文件。您将不得不使用brcc32在较旧的Delphi版本中自行构建资源。在较新的Delphi版本中,您可以使用

{$R 'version.res' 'version.rc'}

让IDE自动为您构建它。

最简单的version.rc看起来像:

1 VERSIONINFO
FILEVERSION 9999, 9999, 99, 18048
PRODUCTVERSION 9999, 9999, 99, 18048
FILEOS 0x00000004L // comment: VOS_WINDOWS32
FILETYPE VFT_APP
{
 BLOCK "VarFileInfo"
 {
  VALUE "Translation", 0x409, 0x4E4 // comment: 0x4E4 = 1252
 }

 BLOCK "StringFileInfo"
 {
  BLOCK "040904E4"
  {
   VALUE "CompanyName", "Company Name\0"
   VALUE "FileVersion", "9999.9999.99.18048\0"
   VALUE "LegalCopyright", "Copyright \0"
   VALUE "ProductName", "Product Name\0"
   VALUE "ProductVersion", "9999.9999.99.18048\0"
   VALUE "Homepage", "http://www.mydomain.com\0"
  }
 }
}

有关详细信息,请参阅VERSIONINFO结构上的MSDN。

答案 1 :(得分:2)

Marjan在上面给出了一个很好的答案,但我的回答更进一步。考虑这个RC文件:

VS_VERSION_INFO VERSIONINFO

#include "..\Ver_Num_Application.txt"
#define APPLICATION_NAME    "My amazing project\0"
#define VER_NUM_ARTWORKS    4
#include "..\Libraries\Paslib32\Ver_Num_Library.txt"
#define COMPANY_NAME        "My company\0"

FILEVERSION    VER_NUM_ARTWORKS, VER_NUM_LIBRARY, VER_NUM_APPLICATION, 1000
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x9L
#else
 FILEFLAGS 0x8L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", COMPANY_NAME
            VALUE "FileDescription", APPLICATION_NAME
            VALUE "LegalCopyright", "Copyright (C) "COMPANY_NAME
            VALUE "ProductName", APPLICATION_NAME
        END
    END 
    BLOCK "VarFileInfo" 
    BEGIN 
        VALUE "Translation", 0x409, 1200
    END 
END

使用多个#INCLUDE语句的好处是您可以单独保留RC文件,然后只需修改(甚至自动生成)* .txt包含文件,如下所示:

Ver_Num_Application.txt:
  #define VER_NUM_APPLICATION 6

Ver_Num_Library.txt:
  #define VER_NUM_LIBRARY 156

请注意,现在您必须在运行构建之前删除* .res文件,以强制链接器从(可能已更改的)版本号重新生成它们。