Skip to content
Snippets Groups Projects
executable.mk 760 B
GCC = gcc

INCDIR = $(TOP)/inc
OBJDIR = obj
EXEDIR = $(TOP)/bin
LIBDIR = $(TOP)/lib

SOURCES = $(wildcard *.c)
HEADERS = $(wildcard *.h)
INCLUDES = $(addprefix $(INCDIR)/, $(HEADERS))
OBJECTS = $(patsubst %.c, $(OBJDIR)/%.o, $(SOURCES))

TARGET = $(EXEDIR)/$(NAME)

CLEANUP = $(TARGET) $(OBJDIR)

.PHONY: default run clean

################
## User Targets
################

default: $(TARGET)

run: $(TARGET)
	cd $(EXEDIR) && ./$(NAME)

clean:
	rm -rf $(CLEANUP)

####################
## Internal Targets
####################

$(TARGET): $(OBJECTS) | $(EXEDIR)
	$(GCC) -g -o $(TARGET) $^ -I$(INCDIR) -L$(LIBDIR) $(REQLIBS)

$(OBJDIR)/%.o : %.c | $(OBJDIR) $(INCDIR)
	$(GCC) -c -g -o $@ $< -I$(INCDIR)

$(OBJDIR):
	mkdir $(OBJDIR)

$(EXEDIR):
	mkdir $(EXEDIR)