0Pricing
C Academy · Lección

Compilar varios archivos

Compile un programa con varios archivos

Compilar varios archivos es una lección gratuita de C Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.

Del código fuente al programa

Convertir código fuente C dividido en varios archivos en un ejecutable ocurre en dos etapas: compilación y enlace.

Cada archivo .c se compila por separado en un archivo objeto. Después, el enlazador combina todos los archivos objeto, resolviendo las referencias entre ellos, para crear un único programa ejecutable.

La compilación con un solo comando

El enfoque más sencillo pasa todos los archivos de código fuente a gcc a la vez. El compilador compila cada uno y después los enlaza automáticamente.

La opción -o asigna el nombre al programa de salida. Enumere todos los archivos .c; los encabezados se incorporan mediante #include y no se enumeran aquí.

gcc main.c math_utils.c -o app

Compilación independiente

En proyectos grandes, compile cada archivo en un archivo objeto con -c. Esto produce un archivo .o y no realiza el enlace.

Compilar por separado significa que, si cambia un solo archivo de código fuente, solo tendrá que recompilar ese archivo, lo que acelera las compilaciones grandes.

gcc -c main.c        /* produces main.o */
gcc -c math_utils.c  /* produces math_utils.o */

La etapa de enlace

Cuando tenga los archivos objeto, enlácelos para crear un ejecutable. Aquí gcc actúa como enlazador: une los objetos y resuelve los símbolos entre archivos.

Esta vez no se utiliza -c, porque queremos un programa final, no otro archivo objeto.

gcc main.o math_utils.o -o app

Qué hace el enlazador

El enlazador asocia cada uso de un símbolo con su definición.

Cuando main.o llama a add, el enlazador encuentra la definición de add en math_utils.o y los conecta. También incorpora el código de la biblioteca estándar que necesita su programa.

Errores de referencia no definida

Si olvida un archivo objeto al enlazar, el enlazador no puede encontrar una definición e informa de una referencia no definida.

Este es un error en tiempo de enlace, no un error de compilación: cada archivo se compiló correctamente, pero faltaba una definición necesaria en el comando final.

gcc main.o -o app
/* undefined reference to `add' */
/* fix: include math_utils.o */

Opciones de advertencia útiles

Compile siempre con las advertencias activadas. -Wall y -Wextra permiten detectar posibles errores desde el principio.

Al añadir -std=c11, selecciona un estándar del lenguaje para que el comportamiento sea predecible entre compiladores. Estas opciones funcionan tanto si compila en un solo paso como si lo hace por separado.

gcc -Wall -Wextra -std=c11 -c main.c
gcc -Wall -Wextra -std=c11 -c math_utils.c
gcc main.o math_utils.o -o app

Rutas de inclusión

Cuando los encabezados se encuentran en otro directorio, indique al compilador dónde buscarlos mediante -I.

Por ejemplo, -Iinclude añade una carpeta include/ a la ruta de búsqueda, por lo que #include "math_utils.h" se resuelve incluso desde otra carpeta.

gcc -Iinclude -c src/main.c -o build/main.o

Por qué es importante recompilar

La compilación independiente resulta especialmente útil cuando solo cambia un archivo. Recompile únicamente el objeto de ese archivo y vuelva a enlazar.

Sin embargo, si edita un encabezado, debe recompilar todos los archivos de código fuente que lo incluyan, porque el texto del encabezado forma parte de cada uno de ellos.

/* edited math_utils.c only */
gcc -c math_utils.c
gcc main.o math_utils.o -o app

Automatización con make

Escribir los comandos manualmente resulta tedioso. Un Makefile registra las reglas y vuelve a compilar solo lo que haya cambiado.

Este ejemplo mínimo enlaza dos objetos en app; make realiza un seguimiento de las marcas de tiempo de los archivos para decidir qué debe recompilar.

app: main.o math_utils.o
	gcc main.o math_utils.o -o app

main.o: main.c math_utils.h
	gcc -c main.c

Resumen de una compilación completa

Este es el flujo completo para un proyecto pequeño, desde los objetos hasta un programa terminado con las advertencias activadas.

Compile cada archivo de código fuente y después enlace los objetos. Ejecute el resultado para confirmar que funciona de principio a fin.

gcc -Wall -c main.c
gcc -Wall -c math_utils.c
gcc main.o math_utils.o -o app
./app

Comprobación rápida

Compruebe su comprensión del proceso de compilación de varios archivos.

Resumen

Ha aprendido a compilar cada archivo .c en un objeto con -c y después a enlazar los objetos para crear un programa. Utilice -Wall y -I para las advertencias y las rutas de inclusión.

Las referencias no definidas indican que falta un objeto en tiempo de enlace. Herramientas como make automatizan la recompilación de solo lo que haya cambiado.

Preguntas frecuentes

¿La lección «Compilar varios archivos» es gratis?

Sí — el texto completo de «Compilar varios archivos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Compilar varios archivos»?

Compile un programa con varios archivos Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C Academy?

No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Compilar varios archivos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C Academy?

Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Archivos de cabecera y de código fuente
  2. Guardas de inclusión
  3. extern y linkage
  4. Compilar varios archivos
← Volver a C Academy