www.delorie.com/djgpp/doc/ug/basics/compiling.html   search  

Guía: Compilación de programas

Debido a su origen Unix, GCC tiene un estilo diferente en cuanto a la sintaxis de las líneas de comando y sus propios algoritmos de compilación y enlazado (link). Tiene además una abundacia excesiva de opciones, algunas de ellas oscuras o semidocumentadas. Esto suele confundir a los usuarios, en especial a aquéllos que han tenido una experiencia previa con compiladores C para DOS.

Dado que GCC es un compilador, su propósito principal es convertir el código fuente que usted escribe en programas que el ordenador pueda ejecutar. Para ello invoca varios recursos. Primero de todo, lee sus códigos fuente. Basándose en la extensión de fichero que usted usó para su programa, selecciona los comandos apropiados que necesita ejecutar para convertir su código fuente en el fichero de salida que usted especificó. Recuerde que gcc es primordialmente un compilador Unix, así que asume que en los nombres de fichero que usted le da se distinguen mayúsculas y minúsculas! Aquí tiene una lista de las extensiones de fichero y lo que gcc hace con ellas.

.c (minúsculas)
Código fuente C estándar. Note que .C (mayúsculas) no es código fuente C - es un código fuente de C++. Los ficheros fuente de C son preprocesados (a través de cpp) buscando los #includes y #defines, y luego son compilados por cc1.

.m
Ficheros Objective C. Preprocesados y luego compilados por cc1obj. Necesitará obc*b.zip para compilar este tipo de archivos.

.h
Estos son los ficheros include. Aunque gcc no los compila, reconoce la extensión para evitar que usted intente compilarlos.

.i
Estos son los archivos fuente C que ya han sido preprocesados. gcc no los preprocesará otra vez, pero los compilará con cc1.

.s (minúsculas)
Ficheros fuente de ensamblador. Éstos se envían directamente a as.

.S (mayúsculas)
También son ficheros fuente de ensamblador, pero éstos son preprocesados con cpp antes de ser ensamblados. De esta forma, puede usar #include y #define. Recuerde que gcc distingue entre mayúsculas y minúsculas! Si usa un Makefile, probablemente sea mejor indicar explícitamente sus ficheros fuente de ensamblador de modo que no dependa de la utilización por defecto de mayúsculas o minúsculas de make por defecto.

.cc .cxx .cpp .c++ .C (mayúsculas)
Fuentes C++. Estos son preprocesados con cpp y luego compilados con cc1plus. Necesitará gpp*b.zip.

.ii
Códigos fuente C++ que ya han sido preprocesados. Éstos son enviados directamente a cc1plus.

.ads .ada
Fuentes Ada. Éstos son preprocesados y compilados con el compilador ada, gnat1. Necesitará instalar GNU Ada para compilar estos ficheros.

.o
Ficheros Objeto. Éstos son la salida del compilador/ensamblador. Si se le indica a gcc que simplemente compile (usando la opción -c), éstos son los ficheros que crea. Se pueden enlazar varios ficheros objeto juntos para producir un ejecutable.

.a
Bibliotecas. Éstos ficheros contienen múltiples ficheros objeto, que gcc puede enlazar en sus programas para suministrarle las funciones que usted ha llamado.

Aquí tiene un resumen de lo que hace gcc:

flow diagram

Probablemente se habrá dado cuenta de que gcc también puede generar diferentes tipos de ficheros de salida. Las opciones -E, -S, y -c indican a gcc que detenga el proceso en el punto indicado y que genere la salida. Nota: La salida de la opción -E se muestra en la pantalla, mientras las otras opciones hacen que se guarde la salida en un fichero. Si lo desea, puede redireccionar la salida a un fichero.

Si no se especifica un nombre para el fichero de salida, gcc crea por defecto un fichero llamado a.exe. Esto diverge de la mayoría de compiladores de DOS, que nombran al programa como el primer fichero fuente u objeto que encuentran. Se puede especificar un nombre de fichero salida con la opción -o (que trabaja junto con la opción -c o -S) de esta manera:

	gcc hello.c -o hello.exe

Este ejemplo es también la forma más simple de crear un ejecutable DOS desde un fichero fuente C. Si el programa consta de múltiples ficheros fuente, puede compilarlos todos a la vez:

	gcc hello.c goodbye.c -o hello.exe

También se puede compilar cada código fuente por separado y luego enlazarlos juntos en un programa:

	gcc -c hello.c
gcc -c goodbye.c
gcc hello.o goodbye.o -o hello.exe

La compilación por separado es más rápida cuando se esta depurando un programa, porque sólo hay que recompilar los fuentes que han sido modificados. Cuando se usa make para gestionar un proyecto, él se encarga de esto y sólo recompila los módulos que hagan falta.

Traducido por: [Gorka's web] (10 diciembre 1999)
Revisado por: [www.cevallos.de] (24/4/2000)

  Copyright © 1997   by DJ Delorie     Updated Jan 1997