RM = rm -f
-INCDIR = .
SRCDIR = .
-# SOURCES = $(addprefix $(SRCDIR)/, ft_putchar.c ft_putstr.c ft_strcmp.c ft_strlen.c ft_swap.c)
+INCDIR = $(SRCDIR)
SOURCES = $(shell find $(SRCDIR) -maxdepth 1 -name "*.c")
OBJECTS = $(SOURCES:.c=.o)
+# Temporary dir to extract all sub-libraries to
+LIBTEMP = .libtemp
+# This finds all the directories except hidden ones and '.' (assumes only visible dirs are project ones)
+# It may prove better to find dirs with Makefiles inside
+COMPLEX_PROJECTS := $(shell find $(SRCDIR) -maxdepth 1 -not -path '*/.*' -not -name . -type d)
+
+COMPLEX_LIBS = $(foreach DIR, $(COMPLEX_PROJECTS:./%=%), ./$(DIR)/$(DIR).a)
+
NAME = libft.a
all : $(NAME)
-$(NAME) : $(OBJECTS)
- $(AR) rcs $(NAME) $(OBJECTS)
+$(NAME) : $(OBJECTS) $(COMPLEX_LIBS) $(LIBTEMP)
+ for lib in $(COMPLEX_LIBS) ; do \
+ $(AR) x $$lib --output $(LIBTEMP) ; \
+ done
+ $(AR) rcs $(NAME) $(OBJECTS) $(shell find $(LIBTEMP) -type f)
%.o : %.c
$(CC) $(CFLAGS) -o $@ -c $< -I $(INCDIR)
+$(COMPLEX_LIBS) :
+ $(MAKE) -C $(shell dirname $@)
+
+$(LIBTEMP):
+ mkdir -p $(LIBTEMP)
+
clean :
- $(RM) $(OBJECTS) $(BONUS_OBJECTS)
+ $(RM) $(OBJECTS)
+ $(RM) -r $(LIBTEMP)
+ for subpr in $(COMPLEX_PROJECTS) ; do \
+ $(MAKE) -C $$subpr clean ; \
+ done
-fclean : clean
+fclean :
$(RM) $(NAME)
+ $(RM) $(OBJECTS)
+ $(RM) -r $(LIBTEMP)
+ for subpr in $(COMPLEX_PROJECTS) ; do \
+ $(MAKE) -C $$subpr fclean ; \
+ done
re : fclean
$(MAKE) all
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/08/15 12:58:15 by ljiriste #+# #+# */
-/* Updated: 2023/09/15 18:43:23 by ljiriste ### ########.fr */
+/* Updated: 2023/10/03 16:28:50 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
void ft_putstr_fd(char *s, int fd);
void ft_putendl_fd(char *s, int fd);
void ft_putnbr_fd(int n, int fd);
+int ft_printf(const char *format, ...);
typedef struct s_list
{