====== Einbetten von Versionsinformationen ====== FIXME 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; FIXME 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 **.rc**.\\ (Es wird empfolen, das ".rc"-File umzubenennen in z.B. "version.rc" oder "_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