Несколько раз man 1 ident
было упомянуто, так что здесь подробно об использовании этого метода.
ident
- это команда, которая поставляется с RCS (Revision Control System), но может также быть доступна, если вы используете CVS (Concurrent Versions System) или Subversion.
Вы бы использовали это так (клонировано со страницы руководства):
#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; }
и f.c компилируется в f.o, затем команда
ident f.c f.o
выдаст
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 $
Если ваш f.o
был добавлен в статическую библиотеку f.a
, тогда ident f.a
должен показать аналогичный вывод. Если в вашем az.a
есть несколько одинаково собранных [a-z].o
, вы должны найти все их строки в файле az.a
.
CAVEAT: То, что они находятся в файле .a, не означает, что они будут включены в файл вашей программы. Если программа не ссылается на них, компоновщик не видит необходимости включать их. Поэтому в каждом модуле обычно требуется метод для возврата строки, и приложение должно вызывать этот метод. Есть способы убедить большинство компоновщиков, что это обязательный символ, без фактической ссылки на него, но это зависит от компоновщика и выходит за рамки этого ответа.
Если вместо этого вы знакомы с SCCS (системой управления исходным кодом), то вместо этого вы должны использовать man 1 what
, и это будет выглядеть так (сделано с макросами, чтобы показать доступную гибкость):
#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; }
и f.c компилируется в f.o, затем команда
what f.c f.o
выведет
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: и ident
, и what
- это команды, которые поставляются с конкретными централизованными системами управления источниками. Если вы используете распределенную систему контроля версий (например, git), вся концепция может не иметь смысла. Для некоторых идей использования git
см. Эту ветку: Переход от CVS к git: $ Id: $ эквивалент? , хотя хэш не совпадает с номером версии. :)