Kilka razy wymieniono man 1 ident
, więc tutaj są szczegóły dotyczące korzystania z tej metody.
ident
to polecenie dołączone do RCS (Revision Control System), ale może być również dostępne, jeśli używasz CVS (Concurrent Versions System) lub Subversion.
będzie go używać tak (sklonowana ze strony człowieka):
#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; }
FC jest kompilowany na fo, wówczas polecenia
ident f.c f.o
wyjściowy będzie
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 $
Jeśli twoje f.o
zostały dodane do biblioteki statycznej f.a
, to ident f.a
powinien pokazywać podobne wyjście. Jeśli masz kilka podobnie zbudowanych [a-z].o
w twoim az.a
, powinieneś znaleźć wszystkie ich ciągi w pliku az.a
.
CAVEAT: Tylko dlatego, że znajdują się w pliku .a nie oznacza, że będą one zawarte w pliku programu. Jeśli program nie odwołuje się do nich, linker nie widzi potrzeby ich uwzględniania. Więc zwykle musisz mieć metodę w każdym module, aby zwrócić ciąg znaków, a aplikacja musi wywołać tę metodę. Istnieją sposoby, aby przekonać większość linkerów, że jest to wymagany symbol bez faktycznego odwoływania się do niego, ale zależy to od linkera i wykracza poza zakres tej odpowiedzi.
Jeśli zamiast tego są zaznajomieni z SCCS (Źródło Code Control System), wówczas należałoby użyć man 1 what
zamiast, i będzie to wyglądać tak (wykonane z makrami pokazać elastyczność dostępne):
#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; }
i fc wkompilowany fo, wówczas polecenie
what f.c f.o
wyjściowy będzie
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: zarówno ident
, jak i what
są komendami, które pochodzą z określonych scentralizowanych systemów kontroli źródła. Jeśli używasz rozproszonego systemu kontroli źródła (takiego jak git), cała koncepcja może nie mieć sensu. W przypadku niektórych pomysłów z użyciem git
zobacz ten wątek: Moving from CVS to git: $Id:$ equivalent? chociaż hash nie jest taki sam jak numer wersji. :)
Rozwiązania poniżej (dwie, jak piszę) są oczywiście również dostępne dla bibliotek współdzielonych. –
Po prostu dodałem kolejną odpowiedź na podstawie Twojej edycji ... Mam nadzieję, że pomaga. – jheddings