Einbetten von Versionsinformationen
Es ist sinnvoll, die Versionsnummer in einem separaten h-File unterzubringen und dieses File nach dem Muster "programmname_version.h" zu benennen. Hier ein Beispiel für die Version "1.2.3.4":
#define VERSION_MAJOR 1 #define VERSION_MINOR 2 #define VERSION_REVISION 3 #define VERSION_BUILD /*@INCREMENT@*/4
Die Versionsnummer setzt sich wie folgt zusammen:
#define APP_VERSION VERSION_MAJOR.VERSION_MINOR.VERSION_REVISION.VERSION_BUILD
Statt VERSION_REVISION kommt noch häufig VERSION_PATCH vor. Hier ein Beispiel für die Definition als Strings:
#define VERSION_MAJOR "1" #define VERSION_MINOR "2" #define VERSION_PATCH "3" #define VERSION_BUILD "4"
Zusammensetzung als String:
#define APP_VERSION VERSION_MAJOR "." VERSION_MINOR "." VERSION_PATCH "." VERSION_BUILD
Verwendung z.B. in "main.c":
static char app_version[] = APP_VERSION;
In MS VisualStudio steht eine Möglichkeit zur Verfügung, die Versionsnummers samt weiteren Angaben, die das Programm beschreiben, in die ".exe"- und ".dll"-Files einzubetten. Eine sehr anschauliche Beschreibung mit weiteren Tipps (z.B. wegen Unicode) findet man hier:
https://www.zachburlingame.com/2011/02/versioning-a-native-cc-binary-with-visual-studio/
Hier ist eine kurze Zusammenfassung aus der o.g. URL, welche Schritte dafür erforderlich sind. In VS:
- Schritt 1: Hinzufügen von Version-Resource
1. Rechtsklick (im Solution-Explorer) auf das Projekt.
2. Auswählen: "Add" → "Resource" → "Version" → "New"
Ergebnis: 2x Files: resource.h und <project_name>.rc.
(Es wird empfolen, das ".rc"-File umzubenennen in z.B. "version.rc" oder "<project_name>_version.rc".) - Schritt 2: Die "version.rc" editieren
1. Rechtsklick (im Solution-Explorer) auf das version.rc.
2. Auswählen: "Open With" → "C++ Source Code Editor" → nach unten skrollen bis zur Sektion "Version". Hier ist ein Beispiel für den Inhalt:///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION VER_FILE_VERSION PRODUCTVERSION VER_PRODUCT_VERSION FILEFLAGSMASK 0x3fL FILEFLAGS VER_FILEFLAGS FILEOS VER_FILEOS FILETYPE VER_FILETYPE FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", VER_FILE_DESCRIPTION_STR "\0" VALUE "FileVersion", VER_FILE_VERSION_STR "\0" VALUE "InternalName", VER_INTERNAL_NAME_STR "\0" VALUE "LegalCopyright", VER_COPYRIGHT_STR "\0" VALUE "OriginalFilename", VER_ORIGINAL_FILENAME_STR "\0" VALUE "ProductName", VER_PRODUCTNAME_STR VALUE "ProductVersion", VER_PRODUCT_VERSION_STR "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END
- Schritt 3: Version Header hinfügen
Als Nächstes wird ein File namens version.h erstellt, um einen Speicherort für die verschiedenen Versionsinformationen bereitzustellen. Dies ist besonders nützlich, wenn die Versionsinformationen über mehrere Projekte innerhalb einer Solution übergreifend sein sollen.#define STRINGIZE2(s) #s #define STRINGIZE(s) STRINGIZE2(s) #define VERSION_MAJOR 1 #define VERSION_MINOR 0 #define VERSION_REVISION 0 #define VERSION_BUILD 0 #define VER_FILE_DESCRIPTION_STR "Description" #define VER_FILE_VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD #define VER_FILE_VERSION_STR STRINGIZE(VERSION_MAJOR) \ "." STRINGIZE(VERSION_MINOR) \ "." STRINGIZE(VERSION_REVISION) \ "." STRINGIZE(VERSION_BUILD) \ #define VER_PRODUCTNAME_STR "c_version_binary" #define VER_PRODUCT_VERSION VER_FILE_VERSION #define VER_PRODUCT_VERSION_STR VER_FILE_VERSION_STR #define VER_ORIGINAL_FILENAME_STR VER_PRODUCTNAME_STR ".exe" #define VER_INTERNAL_NAME_STR VER_ORIGINAL_FILENAME_STR #define VER_COPYRIGHT_STR "Copyright (C) 2011" #ifdef _DEBUG #define VER_VER_DEBUG VS_FF_DEBUG #else #define VER_VER_DEBUG 0 #endif #define VER_FILEOS VOS_NT_WINDOWS32 #define VER_FILEFLAGS VER_VER_DEBUG #define VER_FILETYPE VFT_APP
- Schritt 4: "version.h" in "version.rc" einbinden
// Microsoft Visual C++ generated resource script. // #include "resource.h" #include "version.h" #define APSTUDIO_READONLY_SYMBOLS
In der o.g. URL wird auch erklärt, wie man dabei mit Unicode-Strings umgeht.
Stand: 24.10.2019
EOF