TEORÍA (un poco aburrida, pero te hará comprender mejor el proceso de la compilación):
Este es el procedimiento por el cual pasa un programa en C normalmente (a grandes rasgos):
- Se aplican las directivas de preprocesador. Si no sabes lo que son, ya lo descubrirás)
- Se traducen los archivos .c a un "lenguaje" llamado ensamblador (ASM). Este paso normalmente no depende de ti, solo lo menciono por teoría.
- Ahora se generan los llamados ficheros objeto. Estos ficheros son códigos CASI ejecutables, pero no están enlazados1 con las dependencias del sistema operativo.
- Ahora se enlazan todos los ficheros objeto que has generado mas las librerías que estés usando (que puede que no uses ninguna) más las dependencias del sistema operativo.
1 Enlazar es "mezclar" todo el código ejecutable en un solo fichero ejecutable. Los ficheros ejecutables son los que puedes ejecutar (es decir, puedes abrirlos, como si abres un juego o algo)
______________________________________
CONSEJOS PARA USAR EL COMANDO gcc
Aquí unos parámetros básicos sobre el comando gcc (el cual es prácticamente el mismo tanto en Windows (si usas como compilador el MinGW) como en sistemas Linux (Si usas el compilador GNU-GCC):
-Wall Este parámetro hace que a la hora de compilar te muestre advertencias. Las advertencias no son errores, pero son posibles errores, así que es mejor tenerlas en cuenta.
-o Este parámetro establece el nombre del fichero de salida (por ejemplo, el nombre de tu programa ejecutable)
-c Este parámetro hace que el enlazador no se active, así que lo que creas no es un ejecutable, sino un fichero objeto. Los ficheros objetos son un gran recurso para cuando tienes muchos archivos .c.
Lo que normalmente un IDE hace es generar los ficheros objeto para cada archivo .c (donde está el código). Si después vuelves a compilar y no has modificado algunos ficheros .c, sus ficheros objeto no se recompilarán, ahorrándonos tiempo de compilación
NOTA: Cuando compiles, siempre pon primero tu archivo main.c (donde está la función main) y luego el resto de ficheros de código o ficheros objeto.
Ejemplo de uso del comando con todos los parámetros que te he dado:
gcc -Wall -c -o Programa.o main.c
Este comando te genera un fichero objeto llamado Programa.o a partir del archivo main.c
gcc -Wall -o juego.exe main.c
Este comando te genera un archivo ejecutable llamado juego .exe a partir del archivo main.c
gcc -Wall -o word.exe main.c word.o gui.c
Este comando te genera un ejecutable llamado 'word.exe' a partir del archivo main.c, word.o y gui.c. Como ves, puedes poner tanto ficheros objeto (word.o) como archivos de código fuente (gui.c).