È stato menzionato più volte man 1 ident
, quindi ecco i dettagli sull'utilizzo di tale metodo.
ident
è un comando fornito con RCS (Revision Control System), ma potrebbe anche essere disponibile se si utilizza CVS (Concurrent Versions System) o Subversion.
Si potrebbe usare in questo modo (clonato dalla pagina man):
#include <stdio.h>
static char const rcsid[] =
"$Id: f.c,v 5.4 1993/11/09 17:40:15 eggert Exp $";
int main() { return printf("%s\n", rcsid) == EOF; }
e FC è compilato in fo, quindi il comando
ident f.c f.o
uscita volontà
f.c:
$Id: f.c,v 5.4 1993/11/09 17:40:15 eggert Exp $
f.o:
$Id: f.c,v 5.4 1993/11/09 17:40:15 eggert Exp $
Se il tuo f.o
è stato aggiunto a una libreria statica f.a
quindi ident f.a
dovrebbe mostrare un output simile. Se nel tuo az.a
si sono creati diversi modelli simili [a-z].o
, è necessario trovare tutte le loro stringhe nel file az.a
.
CAVEAT: Solo perché sono nel file .a non significa che saranno inclusi nel file di programma. A meno che il programma non li faccia riferimento, il linker non vede la necessità di includerli. Quindi di solito devi avere un metodo in ogni modulo per restituire la stringa, e l'app deve chiamare quel metodo. Ci sono modi per convincere la maggior parte dei linker che si tratta di un simbolo richiesto senza effettivamente farvi riferimento, ma dipende dal linker ed è oltre lo scopo di questa risposta.
Se invece si ha familiarità con il CSSC (Fonte Control System Code) allora si sarebbe usare man 1 what
invece, e sarebbe simile a questa (fatto con le macro per mostrare la flessibilità disponibile):
#include <stdio.h>
#define VERSION_STR "5.4"
#define CONFIG "EXP"
#define AUTHOR "eggert"
static char const sccsid[] =
"@(#) " CONFIG " v " VERSION_STR " " __DATE__ " " __TIME__ " " AUTHOR;
int main() { return printf("%s\n", sccsid) == EOF; }
e fc è compilato in fo, allora il comando
what f.c f.o
stamperà
f.c:
@(#) EXP v 5.4 1993/11/09 17:40:15 eggert
f.o:
@(#) EXP v 5.4 1993/11/09 17:40:15 eggert
PS: sia ident
che what
sono comandi forniti con specifici sistemi di controllo centralizzato della sorgente. Se si utilizza un sistema di controllo del codice sorgente distribuito (come git), l'intero concetto potrebbe non avere senso. Per alcune idee che utilizzano git
vedi questa discussione: Moving from CVS to git: $Id:$ equivalent? sebbene l'hash non sia lo stesso di un numero di versione. :)
Le soluzioni seguenti (due come scrivo) sono entrambe disponibili anche per le librerie condivise, ovviamente. –
Appena aggiunta un'altra risposta in base alla modifica ... Spero che ti sia d'aiuto. – jheddings