CC=g++
CFLAGS=-c -std=c++11 -O3 -DNDEBUG # -ggdb3 -MMD -Wall -Wextra -Wpedantic
LDFLAGS=-static
SOURCES=knuth_gray_code.cpp periodic_path.cpp small_code.cpp switch.cpp tree.cpp tests.cpp utils.cpp main.cpp
OBJECTS=$(SOURCES:.cpp=.o)
DEPS=$(OBJECTS:.o=.d) # Headerfile dependencies for object files.
											# Generated during compilation, so we do not have these dependencies
											# during first compilation after they change (i.e. new header file
											# is added).
EXECUTABLE=knuth
OTHERS=knuth_gray_code.hpp periodic_path.hpp small_code.hpp switch.hpp tree.hpp tests.hpp utils.hpp Makefile
ZIP=zip
ZIPFILE=knuth.zip

all: $(EXECUTABLE) $(ZIPFILE)

$(EXECUTABLE): $(OBJECTS)
	$(CC) $(OBJECTS) $(LDFLAGS) -o $@

-include $(DEPS)

%.o : %.cpp
	$(CC) $(CFLAGS) $< -o $@

$(ZIPFILE): $(SOURCES) $(OTHERS)
	$(ZIP) $(ZIPFILE) $(SOURCES) $(OTHERS)

clean:
	rm -f $(OBJECTS) $(EXECUTABLE) $(ZIPFILE) $(DEPS)

.PHONY: all clean
