Kompilacja warunkowa - osobne 'Version Info'

0

Witajcie,
mam projekt, z którego są generowane dwie wersje programu (kompilacja warunkowa, odpowiednie define'y ustawiane w Project Manager - > Build Configurations).
Niestety wybór kompilacji nie obejmuje grupy ustawień "Version Info", a chciałbym móc wygenerować exe-ki z poszczególnych projektów, gdzie każdemu ustawię inną wersję (pliku) i opis programu, który będzie widoczny we właściwościach exe-ków. Da się to jakoś sprytnie zrobić?

2

Wydaje mi się, że jedyne wyjście to nie korzystać z informacji o wersji w opcjach projektu tylko ręcznie utworzyć osobne pliki .rc (kompilowane do .res') z informacjami o wersjach i warunkowo dołączać do projektów.

1

Dla potomnych:

  1. Dla kompilacji A (generowanie programu A) tworzymy w notatniku plik tekstowy o nazwie VersionInfoA.rc i wklejamy poniższą treść, modyfikując odpowiednie informacje o programie A i zapisujemy w folderze projektu.
1 VERSIONINFO
FILEVERSION 1,1,1,10
PRODUCTVERSION 1,1,1,10
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
	BLOCK "041504E2"
	{
		VALUE "CompanyName", "Nazwa firmy\0"
		VALUE "FileDescription", "Opis programu\0"
		VALUE "FileVersion", "1.1.1.1\0"
		VALUE "InternalName", "Nazwa wewnetrzna\0"
		VALUE "LegalCopyright", "Prawa autorskie\0"
		VALUE "LegalTrademarks", "Znaki towarowe\0"
		VALUE "OriginalFilename", "Oryginalna nazwa\0"
		VALUE "ProductName", "Nazwa programu\0"
		VALUE "ProductVersion", "1.1.1\0"
		VALUE "Comments", "Komentarz\0"
	}
}

BLOCK "VarFileInfo"
{
	VALUE "Translation", 0x0415 0x04E2
}
}

  1. Dla kompilacji B (generowanie programu B) tworzymy w notatniku plik tekstowy o nazwie VersionInfoB.rc i wklejamy powyższą treść, modyfikując odpowiednie informacje o programie B i zapisujemy w folderze projektu.

  2. W pliku projektu .dpr pod program NazwaProgramu; wpisujemy:

{$DEFINE PROGRAM_A}
//{$DEFINE PROGRAM_B}

{$IFDEF PROGRAM_A}
  {$R 'VersioninfoA.res' 'VersioninfoA.rc'}
{$ELSE}
  {$R 'VersioninfoB.res' 'VersioninfoB.rc'}
{$ENDIF}
  1. Wchodzimy do menu Project -> Options -> Version Info i odznaczamy ptaszka (jeśli jest zaznaczony) przy Include version information in project, żeby IDE nie dołączało zasobu Version Info do wynikowego pliku exe, bo my chcemy zrobić to po swojemu.

  2. Przebudowujemy nasz projekt. W zależności od tego, czy jest aktywny define PROGRAM_A czy PROGRAM_B, do zasobów naszego wynikowego exe-ka zostanie dołączona odpowiednia informacja o wersji.

0

@marogo: wszystko fajnie, jednak ręczne deklarowanie i remowanie symboli w pliku z kodem źródłowym nie jest zbyt wygodne. Głównie wtedy, gdy istnieje potrzeba użycia danego symbolu w wielu modułach. Nie wiem na co pozwala Delphi 2009, jeśli o ustawienia projektu chodzi, ale rozglądnij się za symbolami globalnymi dla całego projektu.

Ogólnie chodzi o to, aby symbole dotyczące całego projektu były deklarowane w jednym miejscu. Dzięki temu, gdy przyjdzie czas na przebudowę projektu, wystarczy w jednym miejscu dokonać zmian. Jest to bardzo przydatne, np. gdy projekt może być kompilowany do kilku wersji: full, portable, trial, demo itd.

Zobacz, może masz coś takiego i nie będziesz musiał definiować symboli w pliku .dpr. A jeśli taka opcja nie istnieje to cóż… zignoruj ten post.

0

Dodam jeszcze ważną informację, że źródłowe pliki zasobów .rc (VersionInfoA.rc i VersionInfoB.rc) należy najpierw dodać do swojego projektu w Menadżerze Projektu, co spowoduje że IDE doda do kodu pliku projektu *.dpr includ'y {$R 'VersioninfoA.res' 'VersioninfoA.rc'} i {$R 'VersioninfoB.res' 'VersioninfoB.rc'}, a potem dopiero można je objąć dyrektywami warunkowymi {$IFDEF}, {$ELSE} i {$ENDIF}. Jeśli się tego w tej kolejności nie zrobi, IDE może zgłosić problem ze znalezieniem plików .rc, w każdym razie Delphi 2009 zgłupiało.

1 użytkowników online, w tym zalogowanych: 0, gości: 1