====== 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