Normalerweise werden Haupt- und Nebenversionsnummern (wie in 1.2, 1 ist Haupt- und 2 ist Nebenversion) meistens direkt in den Code geschrieben, normalerweise als #define
(weil Sie sie möglicherweise für bedingte Kompilierungen benötigen, z. B. #if
Blöcke).
Normalerweise haben Sie einen separaten Header, der nur diese Definitionen enthält und nichts anderes (außer dem Header-Guard), um Abhängigkeiten zu minimieren.
Einige Leute verwenden das Build-System (wie cmake), um eine Versionsnummer aus der Versionskontrolle (git, svn, cvs usw.) zu ziehen und diese Versionsnummer dann in ihren "version"-Header einzufügen. Oder sie fügen die Versionsnummer in die Konfigurationsdateien des Build-Systems ein und setzen diese dann in den Header, wie im cmake-Tutorial gezeigt. Persönlich mag ich diesen Ansatz nicht, da er dazu neigt, Ihre Header-Dateien zu oft zu ändern und häufige und sinnlose Neukompilierungen zu verursachen.
Ich ziehe es vor, die Versionsnummer in die Header-Datei zu schreiben und dann diese Versionsnummern (Haupt-, Neben-, ...) aus dem Header auf das Build-System zu ziehen. Dies ist eine weitere Sache, die cmake sehr einfach erledigen kann.
Wenn Sie eine sehr taggenaue Versionsnummer in Ihre Software einbetten möchten, z. B. eine Build-Nummer oder Revisionsnummer, sollten Sie diese nicht als #define
eingeben in einer Header-Datei, sondern als extern const
Variable, die Sie in einer cpp-Datei definieren. Beispielsweise können Sie cmake verwenden, um eine Revisionsnummer aus Ihrem Versionskontrollsystem abzurufen, und diese an die cpp-Datei anheften, die diesen extern const int revision;
definiert Variable (durch configure_file
von cmake Funktion) und verknüpfen Sie Ihre Programme mit dieser cpp / object-Datei. Auf diese Weise wird die Revisionsnummer bei jedem Rebuild automatisch in Ihre Programme eingebaut und löst nicht jedes Mal, wenn sie aktualisiert wird (was bei jedem Commit der Fall ist), eine vollständige Neukompilierung aus.
Der Punkt ist, dass Haupt- und Nebenversionsnummern nicht häufig genug geändert werden, um irgendeine Art von automatischer Wartung zu erfordern, aber Sie müssen sie manuell nur an einer Stelle schreiben und sie automatisch überall dort verbreiten, wo sie relevant sein könnten (ich würde das empfehlen dieser Ort ist die Header-Datei selbst). Es sind nur die Revisions- oder Build-Nummern, die vollständig automatisiert werden müssen (von der Versionskontrolle generiert und überall sonst automatisch weitergegeben).
Ich glaube, es ist üblich, die Versionsnummer in einer dedizierten Header-Datei aufzubewahren. Einige Tools können dies automatisch für Sie generieren.
Siehe beispielsweise den Abschnitt „Hinzufügen einer Versionsnummer und einer konfigurierten Header-Datei“ im CMake-Tutorial.