Шрифт:
Давайте в третий раз изменим файл и добавим несколько таких макросов:
$ со -l important.с
important.c,v --> important.с
revision 1.2 (locked)
done
$
Отредактируйте файл в соответствии с приведенным далее кодом:
#include <stdlib.h>
#include <stdio.h>
/*
Это важный файл для управления данным проектом.
В нем реализована каноническая программа "Hello World".
Filename: $RCSfile$
*/
static char *RCSinfo = "$Id$";
int main {
printf ("Hello World\n");
printf("This is an extra line added later\n");
printf("This file is under RCS control. Its ID is\n%s\n", RCSinfo);
exit(EXIT_SUCCESS);
}
Теперь сохраните эту версию и посмотрите, как RCS управляет специальными строками:
$ ci important.с
important.с,v <-- important.c
new revision: 1.3;
previous revision: 1.2
enter log message, terminated with single '.' or end of file:
>> Added $RCSfile$ and $Id$ strings
>> .
done
$
Если заглянете в каталог, то найдете только RCS-файл.
$ ls -l
– r--r--r-- 1 neil users 907 2007-07-09 08:07 important.с,v
$
Если вы извлечете текущую версию исходного файла (с помощью команды
со
) и просмотрите его, то увидите, что макросы раскрыты:
#include <stdlib.h>
#include <stdio.h>
/*
Это важный файл для управления данным проектом.
В нем реализована каноническая программа "Hello World".
Filename: $RCSfile: important.с,v $
*/
static char *RCSinfo = "$Id: important.c,v 1.3 2007/07/09. 07:07:08 neil Exp $";
int main {
printf("Hello World\n");
printf("This is an extra line added later\n");
printf("This file is under RCS control. Its ID is\n%s\n", RCSinfo);
exit(EXIT_SUCCESS);
}
А теперь выполните упражнение 9.6.
Упражнение 9.6. GNU-версия
make
с RCSУ команды
make
версии GNU есть несколько встроенных правил для управления RCS-файлами. В этом примере вы увидите, как работать с отсутствующим исходным файлом.
$ rm -f important.с
$ make important
со important.с,v important.c
important.с,v --> important.c
revision 1.3
done
сс -c important.c -o important.о сс important.о -о important
rm important.о important.с
$
Как это работает
У команды
make
есть стандартное правило для создания файла без расширения с помощью компиляции файла с тем же именем и расширением с. Второе стандартное правило разрешает make
создать файл important.c из файла important.c,v, используя RCS. Поскольку нет файла с именем important.c, команда make
создала файл с расширением с, получив последнюю версию файла с помощью команды со
. После компиляции она навела порядок, удалив файл important.c. Команда ident
Команду
ident
можно применять для поиска версии файла, которая содержит строку $Id$
. Поскольку вы сохранили строку в переменной, она появляется и в результирующем исполняемом файле. Может оказаться так, что, если вы включили специальные строки в исходный код, но никогда не обращаетесь к ним, компилятор из соображений оптимизации удалит их. Эту проблему можно обойти, добавив в исходный код несколько фиктивных обращений к ним, хотя по мере улучшения компиляторов делать это становится все труднее!