2013-01-09 13 views
5

Muszę ustawić wersję mojego projektu delphi na taki sam jak inny projekt (nie delphi) jako część skryptu budowania. Czy istnieje sposób kontrolowania numeru wersji bez przechodzenia przez IDE, na przykład parametr wiersza poleceń kompilatora lub coś podobnego? Dziękizmiana numeru wersji w czasie kompilacji

+1

Dlatego należy przestać pozwalać kontrolce IDE na zasoby wersji i skryptować generowanie własnych zasobów wersji jako działanie poprzedzające kompilację. –

+0

@david Czy masz instrukcję, jak to zrobić? –

+2

Spójrz na coś takiego jak FinalBuilder, który pozwala ustawić wszystkie pliki EXE do tego samego numeru kompilacji i zapewnić spójne parametry kompilacji itp. – mj2008

Odpowiedz

12

Dołącz taką linię

{$R 'version.res'} 

w projekcie. I utwórz plik version.rc z informacjami o wersji. Będziesz musiał sam zbudować zasób w starszych wersjach Delphi, używając brcc32. W nowszych wersjach Delphi możesz użyć , aby IDE skompilowało go automatycznie.

Najprostszym version.rc będzie wyglądać mniej więcej tak:

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" 
    } 
} 
} 

Aby uzyskać więcej informacji, zapoznaj się z MSDN na strukturze VERSIONINFO.

+0

+1 za to rozwiązanie, z którego korzystam, ale musisz upewnić się, że usuniesz version.res inaczej zmiany do wersji.rc nie zostaną zauważone przez linker. –

+0

@BrianFrost: jakiej wersji Delphi używasz? Nigdy nie miałem tego problemu. A wyłączyłeś opcję "include version info" w opcjach projektu? –

+0

Mój błąd. Widzę, że musiałem usunąć * .res, kiedy przeszedłem do używania #include w * .rc do numerowania vernsion, więc nie modyfikowałem * .rc tylko mojego pliku włączającego, który ma sam numer wersji. –

1

Marjan podaje znakomitą odpowiedź powyżej, ale moja odpowiedź trochę bardziej. Rozważmy ten plik 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 

Korzyść w użyciu kilka oświadczeń #include jest to, że można pozostawić plik RC sam, a następnie po prostu zmodyfikować (lub nawet automatycznie generować) i * .txt zawierają pliki, które wyglądają jak :

Ver_Num_Application.txt: 
    #define VER_NUM_APPLICATION 6 

Ver_Num_Library.txt: 
    #define VER_NUM_LIBRARY 156 

Zauważ, że teraz trzeba usunąć * .res plików przed uruchomieniem swój build zmusić łącznik zregenerować je z (ewentualnie zmienione) numery wersji.

+0

Czy nie byłoby łatwiej po prostu {$ R ...} innej pary version.res/rc w dpr używającej warunkowej definicji? IE '{$ ifdef DEBUG} {$ R version.res debugversion.rc} {$ ELSE} {$ R version.res version.rc} {$ ENDIF}' To nie tak, że inne informacje często będą się zmieniać ... –

+0

Prawdziwe. Chyba chciałem mieć "standardowy" plik RC dla wszystkich moich projektów i plik z rozszerzeniem * .txt, który otwiera się przy pomocy notatnika. –

+1

Aaww come'on Brian, "standardowy" plik, który mogę zrozumieć, ale plik txt? Jestem pewien, że wiesz jak powiązać pliki .RC z Notatnikiem jako domyślnym edytorem? ;-) –

Powiązane problemy