Cómo compilar y linkear una aplicación usando Make

Jul 23, 2024

Cómo compilar y linkear una aplicación usando Make

Introducción a Make

  • Make: Herramienta para definir relaciones entre archivos y compilar automáticamente.
  • Archivo Makefile: Documento donde se especifican las dependencias y reglas para compilar y linkear.

Estructura del Proyecto

  • 3 archivos .c: main.c, juego.c, personaje.c
  • 2 archivos header: juego.h, personaje.h

Dependencias

  • personaje.h:
    • Define el tipo personaje
    • Declara métodos atacar y level up
    • Implementación en personaje.c
  • juego.h:
    • Depende de personaje.h
    • Define métodos en juego.c
  • main.c:
    • Crea personajes y llama métodos de personaje.h

Creación del Makefile

Definición de Objetivo (Target)

  • Ejemplo: personaje.o a partir de personaje.c y personaje.h.
    personaje.o: personaje.c personaje.h
      	$(CC) $(FLAGS) -c personaje.c -o personaje.o
    
  • Target: archivo que queremos crear.
  • Prerequisitos: archivos necesarios para crear el target.
  • Regla: comando para crear el target, comenzando siempre con un tabulador.

Variables en Makefile

  • Variables de Compilador y Flags
    CC=gcc
    FLAGS=-Wall -Wextra -pedantic
    
  • Uso de Variables en Reglas
    personaje.o: personaje.c personaje.h
      	$(CC) $(FLAGS) -c $< -o $@
    
    • $<: primer prerequisito
    • $@: target

Dependencias Adicionales

  • juego.c depende de personaje.h
  • main.c depende de juego.h y personaje.h

Generación de Ejecutable

  • Definición del target ejecutable:
    ejecutable: main.o juego.o personaje.o
      	$(CC) $(FLAGS) main.o juego.o personaje.o -o ejecutable
    
  • Ejecución de Make:
    • make: genera el ejecutable si los prerequisitos están actualizados.
    • Comparación de fechas de modificación para determinar recompilación.

Targets Phony

  • Phony Targets: comandos virtuales que no corresponden a archivos reales.
    • Ejemplo: clean para borrar archivos objeto y ejecutable.
    .PHONY: clean
    clean:
      	rm -f *.o ejecutable
    
  • Target all para generar todo:
    .PHONY: all
    all: ejecutable
    

Conclusión

  • Ventaja de Make: Realiza solo los pasos de compilación necesarios al detectar cambios en archivos.
  • Recomendación: Uso de flags de warnings y targets phony para una mayor eficiencia y claridad en la compilación.