Skip to content

Makefile

Marcos edited this page Oct 6, 2024 · 1 revision

El Makefile es una parte esencial del proyecto ft_printf, ya que automatiza el proceso de compilación.

NAME = libftprintf.a
CC = cc
CFLAGS = -Wall -Wextra -Werror
SRC = ft_printf.c ft_putchar.c ft_putnbr.c ft_putstr.c ft_putunsigned.c ft_puthex.c ft_putptr.c

OBJ = $(SRC:.c=.o)

all: $(NAME)

$(NAME): $(OBJ)
	ar rcs $(NAME) $(OBJ)

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

clean:
	rm -f $(OBJ)

fclean: clean
	rm -f $(NAME)

re: fclean all

.PHONY: all clean fclean re

Explicación

Variables

  • NAME: Define el nombre del archivo de la librería que se va a crear, en este caso libftprintf.a.
  • CC: El compilador que se va a utilizar, en este caso es cc, el compilador estándar de C.
  • CFLAGS: Flags de compilación. Se incluyen:
    • -Wall: Habilita todos los mensajes de advertencia.
    • -Wextra: Habilita advertencias adicionales que no están cubiertas por -Wall.
    • -Werror: Trata todas las advertencias como errores, lo que asegura un código más robusto.
  • SRC: Lista de archivos fuente (.c) que forman parte del proyecto.
  • OBJ: Convierte todos los archivos .c listados en SRC en sus correspondientes archivos objeto (.o).

Reglas

  • all: Regla predeterminada que se ejecuta cuando se invoca make. Llama a la regla para crear el archivo de la librería ($(NAME)).

  • $(NAME): Esta regla se asegura de que todos los archivos objeto (.o) están actualizados y crea la librería estática usando ar rcs.

  • %.o: %.c: Regla genérica que indica cómo compilar un archivo .c en un archivo .o utilizando el compilador definido en CC y los flags en CFLAGS.

  • clean: Elimina los archivos objeto (.o) generados durante la compilación.

  • fclean: Llama a clean y además elimina el archivo de la librería (libftprintf.a).

  • re: Llama a fclean y luego recompila todo desde cero.

.PHONY

La línea .PHONY se utiliza para indicar que las reglas all, clean, fclean, y re no son archivos, sino comandos que se ejecutan como parte de la compilación.

Clone this wiki locally