Исследование дерева исходных текстов

В результате распаковывания tar-файла был создан новый каталог new diction-1.11. Этот каталог содержит дерево исходных текстов. Давайте заглянем внутрь:

[me@linuxbox src]$ cd diction-1.11

[me@linuxbox diction-1.11]$ ls

config.guess diction.c getopt.c nl

config.h.in diction.pot getopt.h nl.po

config.sub diction.spec getopt_int.h README

configure diction.spec.in INSTALL sentence.c

configure.in diction.texi.in install-sh sentence.h

COPYING en Makefile.in style.1.in

de en_GB misc.c style.c

de.po en_GB.po misc.h test

diction.1.in getopt1.c NEWS

Здесь мы видим множество файлов. Программы, принадлежащие проекту GNU, а также многие другие поставляются вместе с файлами документации README, INSTALL, NEWS и COPYING. В них содержится описание программы, информация о порядке сборки и установки и условия лицензионного соглашения. Я рекомендую всегда внимательно прочитывать файлы README и INSTALL перед сборкой программы.

Другими интересными файлами в этом каталоге являются файлы с расширениями .c и .h:

[me@linuxbox diction-1.11]$ ls *.c

diction.c getopt1.c getopt.c misc.c sentence.c style.c

[me@linuxbox diction-1.11]$ ls *.h

getopt.h getopt_int.h misc.h sentence.h

Файлы с расширением .c содержат две программы на C, входящие в состав пакета (style и diction), разбитые на несколько модулей. Большие программы часто разбивают на более мелкие, более простые в сопровождении фрагменты. Файлы с исходным кодом содержат простой текст, и их можно исследовать с помощью less:

[me@linuxbox diction-1.11]$ less diction.c

Файлы с расширением .h известны как заголовочные файлы. Они тоже содержат простой текст — описание подпрограмм, подключаемых из файла с исходным кодом или библиотеки. Чтобы компилятор смог связать модули, он должен иметь описание всех модулей, составляющих единую программу. Ближе к началу в файле diction.c имеется следующая строка:

#include "getopt.h"

Она требует от компилятора прочитать фал getopt.h, прежде чем продолжать чтение исходного кода в diction.c, чтобы «узнать», что имеется в файле getopt.c. Файл getopt.c содержит код подпрограмм, используемых обеими программами, style и diction.

Инструкции подключения файла getopt.h предшествует еще несколько инструкций include:

#include <regex.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

Они также ссылаются на заголовочные файлы, но эти файлы хранятся за пределами дерева исходных текстов. Они должны поставляться системой для поддержки компиляции программ. Эти файлы можно найти в каталоге /usr/include:

[me@linuxbox diction-1.11]$ ls /usr/include

Заголовочные файлы помещаются в этот каталог в процессе установки компилятора.