Benutzer-Werkzeuge

Webseiten-Werkzeuge


edv:prg:c:tipp:einbetten_von_versionsinformationen

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

edv/prg/c/tipp/einbetten_von_versionsinformationen.txt · Zuletzt geändert: 2020/01/11 01:23 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki