-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
123 lines (98 loc) · 3.31 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# Makefile generated by Make My File: https://github.com/MathysCogne/Make_My_File-42
# Date of generation: 27-10-2024 02:22:54
NAME = so_long
SRCDIR = src
OBJDIR = obj
INCDIR = include
SRC = main.c \
so_long.c \
map/map_parsing.c map/map_verif.c map/map_valid_path.c map/map_draw.c \
mlx/mlx_initialisation.c mlx/mlx_load_textures.c mlx/mlx_load_textures_2.c mlx/mlx_events.c mlx/mlx_animation.c \
game/game_move_player.c game/game_move_monsters.c game/game_verif_pos.c game/game_health_attack_player.c game/game_over_win.c game/game_ui_counter.c \
utils/utlis.c utils/utils_struct.c utils/utils_mlx.c utils/utils_verif_load_textures.c utils/utils_free.c utils/utils_error.c
OBJ = $(SRC:.c=.o)
SRC := $(addprefix $(SRCDIR)/, $(SRC))
OBJ := $(patsubst $(SRCDIR)/%, $(OBJDIR)/%, $(OBJ))
# Libft
LIBFT_DIR := libft
LIBFT := $(LIBFT_DIR)/libft.a
LIBFT_INCLUDE := $(LIBFT_DIR)/include
# MiniLibx
MINILIBX_DIR := ./minilibx-linux
MLX := $(MINILIBX_DIR)/libmlx.a
# Libraries and Linker Flags
LDFLAGS = -L$(MINILIBX_DIR) -L$(LIBFT_DIR)
LIBS = $(MLX) $(LIBFT)
# Archiver
AR = ar
ARFLAGS = rcs
# Compiler and Flags
CC = cc
CFLAGS = -Wall -Wextra -Werror -I$(INCDIR) -g3 -I$(MINILIBX_DIR) -I/usr/include/X11 -I$(LIBFT_INCLUDE)
# Detect OS for Flags MiniLibx
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
MLXFLAGS += -lXext -lX11 -lm -lz
else ifeq ($(UNAME_S),Darwin)
MLXFLAGS += -L/opt/X11/lib -lX11 -lXext -lXrandr -lXcursor
endif
# Compilation mode (silent by default, set VERBOSE=1 to show commands)
VERBOSE ?= 0
ifeq ($(VERBOSE),1)
V :=
else
V := @
endif
# Colors
RED := "\033[1;31m"
GREEN := "\033[1;32m"
RESET := "\033[0m"
# Default Rule
all: $(OBJDIR) $(MINILIBX_DIR) $(LIBFT) $(NAME)
# Object Directory Rule
$(OBJDIR):
$(V)mkdir -p $(OBJDIR) || true
# Dependency Files
DEP = $(OBJ:.o=.d)
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
@mkdir -p $(dir $@)
$(V)$(CC) $(CFLAGS) -MMD -MP -c $< -o $@
-include $(DEP)
# Linking Rule
$(NAME): $(OBJ) $(LIBFT)
$(V)$(CC) $(CFLAGS) $(LDFLAGS) $(OBJ) $(BONUS_OBJ) $(LIBS) $(MLXFLAGS) -o $(NAME)
$(V)echo $(GREEN)"[$(NAME)] Executable created ✅"$(RESET)
bonus: $(NAME)
$(V)echo $(GREEN)"[$(NAME)] Executable with bonus created 🥳"$(RESET)
# Libft
$(LIBFT):
$(V)echo '[$(NAME)] Downloading Libft from github.com...'$(RESET)
@git clone https://github.com/MathysCogne/MyLibft_GNL_Printf.git libft > /dev/null 2>&1
$(V)echo '[$(NAME)] Compiling Libft...'$(RESET)
$(V)$(MAKE) --silent -C $(LIBFT_DIR)
$(V)echo '[$(NAME)] Libft build successfully'
# MiniLibX
$(MINILIBX_DIR):
$(V)echo '[$(NAME)] Downloading MiniLibX from github.com...'$(RESET)
@git clone https://github.com/42Paris/minilibx-linux.git $(MINILIBX_DIR) > /dev/null 2>&1
$(V)echo '[$(NAME)] Compiling MiniLibX...'$(RESET)
@$(MAKE) -C $(MINILIBX_DIR) > /dev/null 2>&1
$(V)echo '[$(NAME)] MiniLibX installed successfully'$(RESET)
# Clean Rules
clean:
$(V)echo $(RED)'[$(NAME)] Cleaning objects'$(RESET)
$(V)rm -rf $(OBJDIR)
fclean: clean
$(V)echo $(RED)'[$(NAME)] Cleaning all files'$(RESET)
$(V)rm -f $(NAME)
$(V)$(MAKE) --silent -C $(LIBFT_DIR) fclean
$(V)echo $(RED)'[mlx] Remove directory'$(RESET)
$(V)echo $(RED)'[libft] Remove directory'$(RESET)
@rm -rf $(MINILIBX_DIR)
@rm -rf $(LIBFT_DIR)
re: fclean all
# Makefile Reconfiguration
regen:
makemyfile
.PHONY: all clean fclean re bonus regen
.DEFAULT_GOAL := all