0Pricing
C Academy · Lección

Makefiles

Automatice la compilación

Makefiles es una lección gratuita de C Academy en CoddyKit. Esta es la lección 3 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.

Por qué usar Makefiles

Escribir manualmente los comandos de gcc se vuelve inmanejable rápidamente. make lee un Makefile que describe cómo compilar el proyecto y ejecuta solo los comandos necesarios.

Su característica clave: vuelve a compilar un archivo solo cuando sus entradas son más recientes que la salida, lo que ahorra muchísimo tiempo de compilación.

Anatomía de una regla

Una regla tiene tres partes: un objetivo, sus prerrequisitos y una receta.

La línea de la receta DEBE comenzar con un carácter TAB real, no con espacios. Este es el error más común en los Makefiles.

target: prerequisite1 prerequisite2
	<TAB>command to build target

Un primer Makefile

Esto compila app a partir de dos archivos fuente. Al ejecutar make sin argumentos, se compila el primer objetivo.

Si ninguno de los archivos fuente ha cambiado desde la última compilación, make muestra «up to date» y no hace nada.

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

Reglas de compilación separada

Compilar cada objeto por separado significa que un cambio en un archivo solo vuelve a compilar ese archivo.

make sigue el grafo de dependencias: si cambia main.c, solo se vuelven a ejecutar main.o y el enlazado final.

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

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

Variables

Las variables eliminan la repetición. Defínalas al principio y expándalas con $(NAME).

Así, cambiar el compilador o las opciones ocurre en un solo lugar.

CC = gcc
CFLAGS = -Wall -Wextra -g

app: main.o math_utils.o
	$(CC) main.o math_utils.o -o app

Variables automáticas

make proporciona abreviaturas dentro de las recetas:

  • $@ — el nombre del objetivo
  • $^ — todos los prerrequisitos
  • $< — el primer prerrequisito

Permiten mantener las recetas breves y correctas.

app: main.o math_utils.o
	$(CC) $^ -o $@

main.o: main.c
	$(CC) $(CFLAGS) -c $< -o $@

Reglas de patrones

Una sola regla de patrones compila cada archivo .c en su correspondiente archivo .o, por lo que ya no tiene que escribir una regla para cada archivo.

% coincide con cualquier parte variable del nombre; combinado con $< y $@, permite crear una regla completamente genérica.

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

Objetivos ficticios

Los objetivos como clean no producen un archivo con ese nombre. Declárelos como .PHONY para que make siempre los ejecute, incluso si existe un archivo llamado «clean».

clean elimina los artefactos de compilación para forzar una compilación desde cero.

.PHONY: clean
clean:
	rm -f *.o app

Un Makefile completo

Todo junto: variables, una regla de patrones, una regla de enlazado y un objetivo ficticio para limpiar.

Esto se adapta a muchos archivos sin necesidad de editar reglas individuales.

CC = gcc
CFLAGS = -Wall -Wextra -g
OBJS = main.o math_utils.o

app: $(OBJS)
	$(CC) $^ -o $@

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

.PHONY: clean
clean:
	rm -f $(OBJS) app

Cómo decide make

make compara las marcas de tiempo. Un objetivo se vuelve a compilar si algún prerrequisito tiene una hora de modificación más reciente o si el objetivo no existe.

Por eso es importante indicar las dependencias de las cabeceras: al editar una cabecera, todos los objetos que dependen de ella se vuelven a compilar correctamente.

Varios objetivos y valores predeterminados

El primer objetivo de un Makefile es el predeterminado y se ejecuta al escribir make sin más. Por convención, se llama all.

También puede compilar un objetivo específico por su nombre, como make clean o make test, lo que proporciona varios puntos de entrada útiles en un solo Makefile.

.PHONY: all
all: app

test: app
	./app --selftest

Comprobación rápida

Diagnostique un error clásico de Makefile.

Resumen

Ya puede automatizar las compilaciones con make:

  • Las reglas constan de un objetivo, prerrequisitos y una receta indentada con TAB
  • Las variables y las variables automáticas ($@ $^ $<) reducen la repetición
  • Las reglas de patrones (%.o: %.c) gestionan cualquier archivo de forma genérica
  • .PHONY marca objetivos que no son archivos, como clean
  • make solo vuelve a compilar lo que está desactualizado según su marca de tiempo

A continuación: compilar bibliotecas estáticas y compartidas.

Preguntas frecuentes

¿La lección «Makefiles» es gratis?

Sí — el texto completo de «Makefiles» 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 «Makefiles»?

Automatice la compilación 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 3 de 4.

¿Cuánto tiempo toma la lección «Makefiles»?

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. Compilación condicional
  2. Proyectos con varios archivos
  3. Makefiles
  4. Bibliotecas estáticas y compartidas
← Volver a C Academy