Основы программирования в Linux
Часть 172 из 324 Информация о книге
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 управляет специальными строками:
$ <b>ci important.с</b>important.с,v <-- important.cnew revision: 1.3;previous revision: 1.2enter log message, terminated with single '.' or end of file:>> <b>Added $RCSfile$ and $Id$ strings</b>>> <b>.</b>done$Если заглянете в каталог, то найдете только RCS-файл.
$ <b>ls -l</b>-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 $<i>*/</i>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-версияс RCSmakeУ команды
версии GNU есть несколько встроенных правил для управления RCS-файлами. В этом примере вы увидите, как работать с отсутствующим исходным файлом.make$ <b>rm -f important.с</b>$ <b>make important</b>со important.с,v important.cimportant.с,v --> important.crevision 1.3doneсс -c important.c -o important.о сс important.о -о importantrm important.о important.с$Как это работает
У команды
есть стандартное правило для создания файла без расширения с помощью компиляции файла с тем же именем и расширением с. Второе стандартное правило разрешаетmakeсоздать файл important.c из файла important.c,v, используя RCS. Поскольку нет файла с именем important.c, командаmakeсоздала файл с расширением с, получив последнюю версию файла с помощью командыmake. После компиляции она навела порядок, удалив файл important.c.соКоманда identКоманду
можно применять для поиска версии файла, которая содержит строкуident. Поскольку вы сохранили строку в переменной, она появляется и в результирующем исполняемом файле. Может оказаться так, что, если вы включили специальные строки в исходный код, но никогда не обращаетесь к ним, компилятор из соображений оптимизации удалит их. Эту проблему можно обойти, добавив в исходный код несколько фиктивных обращений к ним, хотя по мере улучшения компиляторов делать это становится все труднее!$Id$Далее показан простой пример того, как можно использовать команду
для двойной проверки RCS-версии исходного файла, применяемого для формирования исполняемого файла (упражнение 9.7).identУпражнение 9.7. Командаident$ <b>./important</b>Hello WorldThis is an extra line added laterThis file is under RCS control. Its ID is$Id: important.c,v 1.3 2007/07/09 07:07:08 neil Exp $$ <b>ident important</b>important:$Id: important.c,v 1.3 2007/07/09 07 :07 :08 neil Exp $$Как это работает
Выполняя программу, вы показываете строку, включенную в исполняемый файл. Далее вы демонстрируете, как команда
может извлечь из исполняемого файла строки видаident.$Id$Этот метод применения RCS и строк вида
, включаемых в исполняемые файлы, может быть очень мощным средством определения версии файла, содержащей ошибку, о которой сообщил пользователь. RCS-файлы (или SCCS) можно применять как часть средства отслеживания в проекте проблем, о которых сообщается, и способов их устранения. Если вы продаете программное обеспечение или даже отдаете его бесплатно, очень важно знать, что изменилось между двумя выпущенными версиями.$Id$