viernes, 25 de noviembre de 2016

Examinando el árbol de código fuente

Desempaquetar el archivo tar da como resultado la creación de un nuevo directorio, llamado diction-1.11. Este directorio contiene el árbol de código fuente. Miremos dentro:

[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

En él, vemos una cantidad de archivos. Los programas pertenecientes al Proyecto GNU, así como muchos otros, proporcionarán los archivos de documentación README, INSTALL, NEWS y COPYING. Estos archivos contienen la descripción del programa, información de cómo construirlo e instalarlo, y sus términos de licencia. Siempre es una buena idea leer los archivos README e INSTALL antes de intentar construir el programa.

Los otros archivos interesantes en este directorio son los que terminan en .c y .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

Los archivos .c contienen los dos programas C proporcionados por el paquete (style y diction), divididos en módulos. Es una práctica común para programas grandes dividirlos en trozos más pequeños y fáciles de manejar. Los archivos de código fuente son de texto ordinario y pueden examinarse con less:

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

Los archivos .h se conocen como archivos de cabecera (header files). Estos, también, son texto ordinario. Los archivos de cabecera contienen descripciones de las rutinas incluidas en un archivo de código fuente o biblioteca. Para que el compilador pueda conectar los módulos, debe recibir una descripción de los módulos necesarios para completar todo el programa. Al principio del archivo diction.c, vemos esta línea:

#include "getopt.h"

Esto ordena al compilador que lea el archivo getopt.h mientras lee el código fuente de diction.c para poder "saber" qué hay en getopt.c. El archivo getopt.c proporciona rutinas que son compartidas por los programas style y diction.

Encima de la declaración include de getopt.h, vemos otras declaraciones include como estas:

#include <regex.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

Estas se refieren también a archivos de cabecera, pero se refieren a archivos de cabecera que se encuentran fuera del árbol de código fuente actual. Son proporcionados por el sistema para soportar la compilación de cada programa. Si miramos en /usr/include, podemos verlos:

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

Los archivos de cabecera en este directorio se instalaron cuando instalamos el compilador.

No hay comentarios:

Publicar un comentario