Files
42_INT_10_cube3d/Makefile
2022-05-02 16:11:54 +02:00

123 lines
2.5 KiB
Makefile

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# . name = value \ . += append to a variable #
# VARIABLES . value . != set result of command #
# . name is case sensitive . ?= set if not already set #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
NAME = cube3d
VPATH = $(D_SRCS)
EXT = c
CC = gcc
OS = $(shell uname)
# sources
D_SRCS = srcs \
srcs/init \
srcs/gnl \
srcs/parsing \
srcs/hook \
srcs/draw \
srcs/player \
srcs/mem
SRCS = cube3d.c
# mem/
SRCS += memorybook.c \
memorybook_2d.c \
memorybook_utils.c
# init/
SRCS += init_struct.c \
init_game.c \
init_textures.c
# gnl/
SRCS += get_next_line.c \
get_next_line_utils.c
# parsing/
SRCS += init_parsing.c \
check_extension.c \
check_path.c \
check_rgb.c \
check_map.c
# hook/
SRCS += keyhook.c \
key_action_1.c \
key_action_2.c
# player/
SRCS += player_moves.c \
player_rotates.c \
player_limits.c
# draw/
SRCS += draw.c \
ray_intersect.c \
raycast.c \
draw_column.c
# headers
D_HEADERS = headers
HEADERS = cube3d.h \
cube3d_proto.h \
cube3d_macro.h \
cube3d_struct.h \
memorybook.h \
colors.h
INCLUDES = -I$(D_HEADERS) -I$(D_LFT) -I$(D_LMLX)
# libraries
D_LIB = libs
D_LFT = $(D_LIB)/libft
ifeq (${OS}, Linux)
D_LMLX = $(D_LIB)/minilibx-linux
else
D_LMLX = $(D_LIB)/minilibx-macos
endif
# objects
D_OBJS = builds
OBJS = $(SRCS:%.$(EXT)=$(D_OBJS)/%.o)
RM_OBJS = rm -rf $(D_OBJS)
# flags
CFLAGS = -Wall -Wextra -Werror $(INCLUDES)
CFLAGS += -g3
LFLAGS = -L$(D_LFT) -lft
LFLAGS += -L$(D_LMLX) -lm -lmlx -lXext -lX11
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# . target: prerequisites . $@ : target #
# RULES . recipe . $< : 1st prerequisite #
# . recipe . $^ : all prerequisites #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
all: $(NAME)
$(D_OBJS)/%.o: %.$(EXT) | $(D_OBJS)
$(CC) $(CFLAGS) -c $< -o $@
$(D_OBJS):
mkdir $@
$(OBJS): $(HEADERS:%=$(D_HEADERS)/%)
$(NAME): $(OBJS)
make -C $(D_LFT)
make -C $(D_LMLX)
$(CC) $(OBJS) -o $@ $(LFLAGS) $(CFLAGS)
leaks: $(NAME)
valgrind --leak-check=full --show-leak-kinds=all ./$(NAME)
clean:
$(RM_OBJS)
fclean: clean
make fclean -C $(D_LFT)
make clean -C $(D_LMLX)
rm -f $(NAME)
re: fclean all
.PHONY : all clean fclean re