AnnaConnect/makefile

58 lines
1.1 KiB
Makefile

#!/usr/bin/make -f
FLAGS = -std=gnu23
FLAGS += -O3
FLAGS += -pedantic
FLAGS += -Wall
FLAGS += -Wextra
FLAGS += -Werror
OBJDIR = obj
OUTDIR = out
#UI_TARGET = vt100
UI_TARGET = ncurses
CC = cc
.NOTINTERMEDIATE:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling C:
MSG_CLEANING = Cleaning:
MSG_CLEANING_OBJ = Cleaning $(OBJDIR):
MSG_CLEANING_OUT = Cleaning $(OUTDIR):
all: $(addprefix $(OUTDIR)/connect4_,ncurses.elf vt100.elf)
run: $(OUTDIR)/connect4_$(UI_TARGET).elf
./$<
run_%: $(OUTDIR)/connect4_%.elf
./$<
$(OUTDIR)/connect4_ncurses.elf: $(addprefix $(OBJDIR)/,ui_ncurses.o logic.o connect4.o LICENSE.o)
@echo $(MSG_LINKING) $@
@mkdir -p $(@D)
$(CC) $(FLAGS) -lncursesw -o $@ $^
$(OUTDIR)/connect4_%.elf: $(addprefix $(OBJDIR)/,ui_%.o logic.o connect4.o LICENSE.o)
@echo $(MSG_LINKING) $@
@mkdir -p $(@D)
$(CC) $(FLAGS) -o $@ $^
$(OBJDIR)/LICENSE.o: LICENSE
@echo $(MSG_LINKING) $@
@mkdir -p $(@D)
ld -r -b binary -o $@ $^
$(OBJDIR)/%.o: %.c
@echo $(MSG_COMPILING) $^
@mkdir -p $(@D)
$(CC) -c $(FLAGS) -o $@ $^
clean:
@echo $(MSG_CLEANING)
@echo $(MSG_CLEANING_OBJ)
rm -f $(OBJDIR)/*.o
@echo $(MSG_CLEANING_OUT)
rm -f $(OUTDIR)/*.elf