piscine-rush02/ex00/Makefile

84 lines
1.9 KiB
Makefile

SRC = main.c \
ft_strlib.c \
ft_io.c \
argparse.c \
ft_linked_list.c
HEADERS = main.h \
ft_strlib.h \
ft_io.h \
colors.h \
argparse.h \
ft_linked_list.h
OBJDIR = obj
INCDIR = include
CC = cc
CFLAGS = \
-Wall \
-Wextra \
-Werror \
-I$(INCDIR)
LDFLAGS =
_OBJ = $(SRC:.c=.o)
OBJ = $(addprefix $(OBJDIR)/,$(_OBJ))
DEPS = $(addprefix $(INCDIR)/,$(HEADERS))
RM = /bin/rm -f
RMDIR = /bin/rmdir
.DEFAULT_GOAL=test
NAME ?= rush-02
.PHONY: re fclean clean all
all: $(NAME)
clean:
@$(RM) $(OBJ)
fclean: clean
@$(RM) $(NAME)
@$(RMDIR) $(OBJDIR) 2>/dev/null || true
re: fclean all
$(NAME): $(OBJ)
@$(CC) $(LDFLAGS) $^ -o $@
$(OBJ): | $(OBJDIR)
$(OBJDIR)/%.o: %.c $(DEPS)
@#norminette $< >/dev/null || { printf '\033[101;97m%s\033[m\n' "!Norminette Failed>>>"; norminette $<; printf '\033[101;97m%s\033[m\n' "<<<Norminette Failed!"; exit 1; }
@$(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR):
@mkdir -p $@
tests: test
test: re run fclean
SUCCESS_MSG=printf '\n\033[102;30m --- %s --- \033[m\n\n' "Test passed!"
FAIL_MSG=printf '\n\033[101;37m --- %s --- \033[m\n\n' "Test failed!"
SUCCESS_MSG_VALG=printf '\n\033[102;30m --- %s --- \033[m\n\n' "Valgrind ran without errors!"
FAIL_MSG_VALG=printf '\n\033[101;37m --- %s --- \033[m\n\n' "Valgrind Failed!"
SUCCESS=&& $(SUCCESS_MSG) || $(FAIL_MSG)
SUCCESS_VALG=&& $(SUCCESS_MSG_VALG) || $(FAIL_MSG_VALG)
FAIL=&& $(FAIL_MSG) || $(SUCCESS_MSG)
VALGRIND=valgrind --leak-check=full --error-exitcode=1
run:
@clear
./$(NAME) $(SUCCESS)
./$(NAME) 1 $(SUCCESS)
./$(NAME) "./dicts/numbers2.dict" 1 $(SUCCESS)
./$(NAME) 1 "./dicts/numbers2.dict" $(FAIL)
./$(NAME) 1 "./dicts/numb.dict" $(FAIL)
./$(NAME) 1 2 3 $(FAIL)
valgrind: re
$(VALGRIND) ./$(NAME) 1 $(SUCCESS_VALG)
$(VALGRIND) ./$(NAME) "./dicts/numbers2.dict" 1 $(SUCCESS_VALG)