GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie bettet man Versionsinformationen in gemeinsam genutzte Bibliotheken und Binärdateien ein?

Um die @sashang-Antwort zu erweitern und gleichzeitig die von @cdunn2001 erwähnten "$Id:$"-Probleme zu vermeiden, ...

Sie können Ihrem Projekt eine Datei "version_info.h" hinzufügen, die nur Folgendes enthält:

#define VERSION_MAJOR "1"
#define VERSION_MINOR "0"
#define VERSION_PATCH "0"
#define VERSION_BUILD "0"

Und in Ihrer main.c-Datei haben Sie die Zeile:

static char version[] = VERSION_MAJOR "." VERSION_MINOR "." VERSION_PATCH "." VERSION_BUILD;
static char timestamp[] = __DATE__ " " __TIME__;

(oder wie auch immer Sie diese Werte in Ihrem Programm verwenden möchten)

Richten Sie dann einen Pre-Build-Schritt ein, der die Datei version_info.h liest, die Zahlen entsprechend erhöht und sie wieder zurückschreibt. Ein täglicher Build würde nur die VERSION_BUILD-Nummer erhöhen, während eine ernsthaftere Veröffentlichung andere Zahlen erhöhen würde.

Wenn Ihr Makefile dies auf der Voraussetzungsliste Ihres Objekts auflistet, dann wird der Build neu kompilieren, was er braucht.


Die Intel Fortran- und C++-Compiler können dies sicherlich tun, verwenden Sie den -sox Möglichkeit. Also, ja, es gibt einen Weg. Ich kenne keine weit verbreitete Konvention zum Einbetten solcher Informationen in eine Binärdatei, und ich verwende im Allgemeinen Emacs im Hexl-Modus zum Lesen der eingebetteten Informationen, was ziemlich hackisch ist.

'-sox' bettet auch die Compiler-Optionen ein, die zum Erstellen einer ausführbaren Datei verwendet werden, was sehr nützlich ist.


Eine Möglichkeit, dies zu tun, wenn Sie cvs oder Subversion verwenden, besteht darin, eine spezielle ID-Zeichenfolge in Ihrer Quelldatei speziell formatiert zu haben. Fügen Sie dann einen Pre-Commit-Hook zu cvs oder svn hinzu, der diese spezielle Variable mit der neuen Version der Datei aktualisiert, wenn eine Änderung festgeschrieben wird. Wenn die Binärdatei dann erstellt ist, können Sie ident verwenden, um diese Informationen zu extrahieren. Zum Beispiel:

Fügen Sie Ihrer cpp-Datei so etwas hinzu:

static char fileid[] = "$Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $";

Und das Ausführen von ident (das Sie finden können, indem Sie rcs installieren) im Programm sollte die Informationen über die Dateien anzeigen, die eine ID-Zeichenfolge enthalten.

ident program
program:
    $Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $

Hinweis Wie die Leute in den Kommentaren erwähnt haben, ist diese Technik archaisch. Wenn das Quellcodeverwaltungssystem Ihren Quellcode automatisch ändert, ist das hässlich, und die Tatsache, dass sich die Quellcodeverwaltung seit den Tagen verbessert hat, als cvs die einzige Option war, bedeutet, dass Sie einen besseren Weg finden können, um dieselben Ziele zu erreichen.


Linux
  1. `^m` und wie wird man es los?

  2. Wie schreibe ich eine Datei in eine andere?

  3. Wie protokolliere ich jeden in Bash eingegebenen Befehl und jede Dateioperation?

  4. Wie setze ich alle Rhythmbox-Einstellungen und Bibliotheksinformationen zurück?

  5. libstdc++.so.5:Shared-Object-Datei kann nicht geöffnet werden - aber Bibliothek ist installiert und aktuell

Jenkins Shared Library:Erstellen, Konfigurieren und Verwenden

So mounten und unmounten Sie Dateisysteme in Linux

So überprüfen Sie Ubuntu-Versionsdetails und andere Systeminformationen

So überprüfen Sie die Ubuntu-Version – schnelle und einfache Methoden

Wie Echo in Datei

Ubuntu erkennt die ausführbare Datei als gemeinsam genutzte Bibliothek und führt sie nicht durch Klicken aus