Изменить номер версии во время сборки

Мне нужно установить версию моего проекта Delphi такой же, как другой проект (не Delphi), как часть сценария сборки. Есть ли способ управления номером версии без прохождения через IDE, например, параметр командной строки компилятора или что-то в этом роде? Спасибо

2 ответа

Решение

Включить строку как

{$R 'version.res'}

в вашем проекте. И создайте файл version.rc с информацией о вашей версии. Вам придется создать ресурс самостоятельно в старых версиях Delphi, используя brcc32. В новых версиях 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"
  }
 }
}

Для получения дополнительной информации, пожалуйста, обратитесь к MSDN в структуре VERSIONINFO.

Марьян дает превосходный ответ выше, но мой ответ продвигает ответ немного дальше. Рассмотрим этот 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 перед запуском сборки, чтобы компоновщик восстановил их с (возможно, измененных) номеров версий.

Другие вопросы по тегам