|
|
Software entwickeln unter LinuxTricks mit CMichael Schilli |
Inhalt |
96 | Verteilt kompilieren
102 | Feder-Lesen
108 | Perl-Snapshot
112 | Coffee-Shop |
Bei komplexer Software ist es gar nicht so einfach herauszufinden, welche Version gerade installiert ist. Zwar zeigen viele Programme mit der Option »-v« ihre Versionsnummer an, doch bei den CVS-Versionen hilft das nicht. Denn Binaries sind oft aus hunderten oder tausenden Source-Dateien zusammengebastelt. Die CVS-Version dieser Dateien in Erfahrung zu bringen ist vor allem für Entwickler wichtig.
Hier hilft ein einfacher Trick: Im Programmcode am Kopf jeder Datei platziert der Programmierer den String:
static char *RCSID = "@(#) $Header$";
Checkt ein Entwickler nun die 42ste Version mit RCS oder CVS in das Repository ein, expandiert »$Header$« zu etwas wie »$Header: /pfad/myfile.c,v 1.42 2004/09/11 18:50:51 mschilli Exp $« und der Compiler nimmt diesen Wert von jeder Quelldatei in das BSS-Segment des ausführbaren Programms auf.
Aus einem Binary lässt sich dieses Lesezeichen dann mit dem »strings«-Kommando extrahieren:
strings myprogram | grep '@(#)'
Da die Zeichenfolge »@(#)« sonst wohl kaum in den von »strings« aufgestöberten druckbaren Zeichensequenzen vorkommt, lässt sich genau feststellen, aus welchen Quelldatei-Versionen das Programm besteht, wer die einzelnen Komponenten eingecheckt hat und wann das geschehen ist. Wer will, hält sogar das Datum und den Zeitpunkt der Kompilierung im endgültigen Binary fest:
static char *RCSID = "@(#) $Header$ " __DATE__ " " __TIME__;
»__DATE__« und »__TIME__« sind Makros, die der Präprozessor durch Datum und Uhrzeit ersetzt, bevor der Compiler die aneinander gereihten Strings zu einem einzigen verbindet. »gcc -E myfile.c« oder »cpp myfile.c« zeigen den Zwischenschritt an. (mwe/fjl)
Programmierer-Software |
|