CC := gcc AS := nasm ASFLAGS := -g -Wall CFLAGS := -g -Wall -Wextra -Wno-override-init -std=c2x MAIN := $(wildcard *.c) SRC := $(wildcard src/*.s) OBJ_DIR := build OBJ_CC := $(addprefix $(OBJ_DIR)/, $(patsubst %.c,%.o, $(MAIN))) OBJ_AS := $(addprefix $(OBJ_DIR)/, $(patsubst %.s,%.o, $(SRC))) DIR := . NAME := main LIB_NAME:= asm LD := $(CC) LDFLAGS := -L$(OBJ_DIR) -l$(LIB_NAME) all: $(NAME) $(NAME): $(OBJ_CC) $(OBJ_AS) ar rcs $(OBJ_DIR)/lib$(LIB_NAME).a $(OBJ_AS) $(LD) $(OBJ_CC) $(LDFLAGS) -o $(DIR)/$(NAME) $(OBJ_DIR)/%.o: %.c @mkdir -p $(@D) $(CC) $(CFLAGS) -c -o $@ $< $(OBJ_DIR)/%.o: %.s @mkdir -p $(@D) $(AS) $(ASFLAGS) -f elf64 $< -o $@ clean: @rm -f $(NAME) @rm -rf $(OBJ_DIR) re: @make --no-print clean @make --no-print all