Normalerweise für Haupt- und Nebenversionsnummern (wie in, 1.2, 1 Haupt- und 2 ist geringfügig), sie werden meistens direkt in den Code geschrieben, normalerweise als #define
(weil Sie sie für bedingte Kompilationen benötigen, zB #if
Blöcke).
Sie haben normalerweise eine separate Kopfzeile, die nur diese Definitionen und nichts anderes (außer dem Header-Guard) enthält, um Abhängigkeiten zu minimieren.
Einige Leute verwenden das Build-System (wie cmake), um eine Versionsnummer aus der Versionskontrolle (git, svn, cvs, etc ..) und dann diese Versionsnummer in ihre "Version" -Header zu setzen. Oder sie geben die Versionsnummer in die Build-Systemkonfigurationsdateien ein und fügen sie dann in die Kopfzeile ein, wie auf der cmake tutorial gezeigt. Persönlich mag ich diesen Ansatz nicht, weil er dazu neigt, Ihre Header-Dateien zu oft zu modifizieren und häufige und sinnlose Neukompilierungen zu verursachen.
Ich bevorzuge es, die Versionsnummer in der Header-Datei zu schreiben und dann diese Versionsnummern (Major, Minor, ..) aus dem Header auf das Build-System herausziehen. Dies ist eine andere Sache, die CMake sehr leicht tun kann.
Wenn Sie eine sehr tägliche Versionsnummer in Ihre Software einbetten möchten, z. B. eine Build- oder Revisionsnummer, sollten Sie sie nicht als #define
in eine Headerdatei einfügen, sondern als extern const
Variable, die Sie in einer cpp-Datei definieren. Zum Beispiel können Sie cmake verwenden, um eine Versionsnummer aus Ihrem Versionskontrollsystem zu ziehen, diese auf die cpp-Datei zu setzen, die diese extern const int revision;
Variable definiert (über die cmake-Funktion configure_file
), und Ihre Programme mit dieser cpp/object-Datei verknüpfen. Auf diese Weise wird die Revisionsnummer automatisch bei jedem Rebuild in Ihre Programme eingebaut und es wird nicht jedes Mal, wenn es aktualisiert wird, eine vollständige Neukompilierung auslösen (was bei jedem Commit der Fall ist).
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 überall dort weiter verbreiten, wo sie relevant sein könnte (Ich würde empfehlen, dass dieser Ort die Header-Datei selbst ist). Es sind nur die Revisions- oder Build-Nummern, die vollständig automatisiert werden müssen (generiert von der Versionskontrolle und überall sonst automatisch verbreitet).
"Ich bevorzuge es, die Versionsnummer in die Header-Datei zu schreiben und dann diese Versionsnummern aus dem Header auf das Build-System zu ziehen."Eine Chance, dass du mehr darüber erfahren könntest, wie CMake das gemacht hat? – Mohan