Newer
Older
GCC = gcc
AR = ar
INCDIR = $(TOP)/inc
OBJDIR = obj
LIBDIR = $(TOP)/lib
SOURCES = $(wildcard *.c)
TESTSOURCES = $(wildcard test/*.c)
HEADERS = $(wildcard *.h)
INCLUDES = $(addprefix $(INCDIR)/, $(HEADERS))
OBJECTS = $(patsubst %.c, $(OBJDIR)/%.o, $(SOURCES))
TESTOBJECTS = $(patsubst $.c, %.o, $(TESTSOURCES))
TARGET = $(LIBDIR)/lib$(NAME).a
TESTBIN = run_tests
UNITYDEFINES = -DUNITY_INCLUDE_CONFIG_H
################
## User Targets
################
default: $(TARGET) $(INCLUDES)
test: $(TESTBIN)
./$(TESTBIN)
clean:
rm -rf $(TARGET) $(INCLUDES) $(OBJDIR)
####################
## Internal Targets
####################
$(TARGET): $(OBJECTS) | $(LIBDIR)
$(AR) rcs $@ $^
$(OBJDIR)/%.o : %.c | $(OBJDIR) $(INCDIR)
$(GCC) -c -g -o $@ $< -I$(INCDIR) -Wall $(DEFINES)
$(INCDIR)/%.h : %.h | $(INCDIR)
cp $^ $(INCDIR)
$(INCDIR):
mkdir $(INCDIR)
$(OBJDIR):
mkdir $(OBJDIR)
$(LIBDIR):
mkdir $(LIBDIR)
$(TESTBIN): $(TESTOBJECTS) $(OBJECTS) | default
$(GCC) -g -o $(TESTBIN) $^ -I$(INCDIR) -L$(LIBDIR) $(REQLIBS) $(UNITYDEFINES)