build: overhaul Makefile

This commit is contained in:
Khaïs COLIN 2025-07-17 16:07:26 +02:00
parent 6322d05b22
commit 4a2ad1fa58
Signed by: logistic-bot
SSH key fingerprint: SHA256:RlpiqKeXpcPFZZ4y9Ou4xi2M8OhRJovIwDlbCaMsuAo
6 changed files with 33 additions and 16 deletions

1
.gitignore vendored
View file

@ -1,4 +1,5 @@
cub3d cub3d
*.o *.o
*.d
libft.a libft.a
vgcore.* vgcore.*

View file

@ -1,6 +1,13 @@
CC = cc CC = cc
# -fno-omit-frame-pointer is to prevent malloc stacktraces from being truncated,
# see "My malloc stacktraces are too short" here:
# https://github.com/google/sanitizers/wiki/AddressSanitizer
SANITIZERS = -fsanitize=address,undefined -fno-omit-frame-pointer SANITIZERS = -fsanitize=address,undefined -fno-omit-frame-pointer
CFLAGS=-Wall -Wextra -Werror -g $(SANITIZERS) -I mlx ifeq ($(CFLAGS),)
CFLAGS = -Wall -Wextra -Werror -g
endif
IFLAGS = -I./mlx -I./libft
SOURCEFILES = \ SOURCEFILES = \
src/draw/draw_map.c \ src/draw/draw_map.c \
src/draw/drawutils.c \ src/draw/drawutils.c \
@ -13,31 +20,40 @@ SOURCEFILES=\
src/utils/hooks.c \ src/utils/hooks.c \
src/map/map_checker.c \ src/map/map_checker.c \
OBJECTS=$(patsubst src/%.c,objects/%.o,$(SOURCEFILES)) OBJECTS = $(SOURCEFILES:.c=.o)
OBJDIR=objects
NAME = cub3d NAME = cub3d
DEPS = $(OBJECTS:.o=.d)
.PHONY: all clean fclean bonus re sane
all: $(OBJECTS) $(NAME) all: $(OBJECTS) $(NAME)
-include $(DEPS)
$(NAME): $(OBJECTS) $(NAME): $(OBJECTS)
if [[ "$$(echo $$LD_LIBRARY_PATH | grep -c minilibx)" == "0" ]]; then $(MAKE) -C mlx/; fi if [[ "$$(echo $$LD_LIBRARY_PATH | grep -c minilibx)" == "0" ]]; then $(MAKE) -C mlx/; fi
$(MAKE) -C libft/ +$(MAKE) -C libft/
cp libft/libft.a . $(CC) $(CFLAGS) $(IFLAGS) $(OBJECTS) -o $(NAME) -Llibft -Lmlx -lft -lmlx -lz -lXext -lX11
$(CC) $(CFLAGS) $(OBJECTS) -o $(NAME) -L. -lft -Lmlx -lmlx -lz -lXext -lX11
$(OBJDIR)/%.o: src/%.c %.o: %.c
$(CC) $(CFLAGS) -Imlx -c $< -o $@ $(CC) -c $(CFLAGS) $(IFLAGS) -o $*.o $*.c
$(CC) -MM $(CFLAGS) $(IFLAGS) -MT $*.o $*.c > $*.d
clean: clean:
rm -f $(OBJECTS) +make -C libft clean
find . -name '*.o' -print -delete
find . -name '*.d' -print -delete
fclean: clean fclean: clean
+make -C libft fclean
rm -f $(NAME) rm -f $(NAME)
bonus: CFLAGS += -D BONUS=1 bonus: CFLAGS += -D BONUS=1
bonus: all bonus: all
re: fclean all sane: CFLAGS += $(SANITIZERS)
sane: all
.PHONY: all clean fclean bonus re re:
+make fclean
+make all

View file

View file

View file

View file