CC := gcc LD := $(CC) LDFLAGS := -shared CFLAGS := $(shell cat compile_flags.txt | sed -z "s/\n/ /g") SRC := $(wildcard src/*.c) LIB := lib/lib.a OBJ_DIR := build OBJ := $(addprefix $(OBJ_DIR)/, $(patsubst %.c,%.o,$(SRC))) DIR := . RAW_NAME:= ft_malloc LIB_NAME:= lib$(RAW_NAME) ifeq ($(HOSTTYPE),) HOSTTYPE := $(shell uname -m)_$(shell uname -s) endif NAME := $(LIB_NAME).so NAME_L := $(LIB_NAME)_$(HOSTTYPE).so all: $(NAME) $(NAME): $(OBJ) @make --no-print -C lib all $(LD) $(LDFLAGS) -o $(DIR)/$(NAME_L) $(OBJ) $(LIB) ln -sf $(DIR)/$(NAME_L) $(DIR)/$(NAME) $(OBJ_DIR)/%.o: %.c @mkdir -p $(@D) $(CC) $(CFLAGS) -c -o $@ $< clean: @rm -rf $(OBJ_DIR) @rm -f main.o fclean: clean @rm -f $(DIR)/$(NAME) @rm -f $(DIR)/$(NAME_L) @rm -f main re: @make --no-print clean @make --no-print all main: $(NAME) export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(shell pwd)/ $(CC) main.c -L. -l$(RAW_NAME) -o main .PHONY: all clean re