HEADERS := scsl.h \ Arena.h \ Buffer.h \ Commander.h \ Dictionary.h \ Exceptions.h \ Flag.h \ StringUtil.h \ Test.h \ TLV.h \ WinHelpers.h SOURCES := Arena.cc \ Buffer.cc \ Commander.cc \ Dictionary.cc \ Exceptions.cc \ Flag.cc \ StringUtil.cc \ Test.cc \ TLV.cc \ WinHelpers.cc BUILD := DEBUG OBJS := $(patsubst %.cc,%.o,$(SOURCES)) LIBS := libscsl.a TARGETS := $(LIBS) phonebook TESTS := bufferTest dictionaryTest flagTest tlvTest CXX := clang++ CXXFLAGS := -std=c++14 -Werror -Wall -Wextra -DSCSL_DESKTOP_BUILD \ -DSCSL_BUILD_TYPE=${BUILD} ifeq ($(BUILD),DEBUG) CXXFLAGS += -g -fsanitize=address else CXXFLAGS += -O2 endif .PHONY: all all: $(TARGETS) $(TESTS) tags run-tests tags: $(HEADERS) $(SOURCES) ctags $(HEADERS) $(SOURCES) libscsl.a: $(OBJS) $(AR) rcs $@ $(OBJS) .PHONY: print-% print-%: ; @echo '$(subst ','\'',$*=$($*))' klib.a: $(OBJS) .PHONY: clean clean: # build outputs rm -f $(TARGETS) $(TESTS) *.o # test miscellaneous rm -f core core.* tags arena_test.bin .PHONY: run-tests run-tests: $(TESTS) for testbin in $(TESTS); \ do \ echo "./$${testbin}" ; \ ./$${testbin}; \ done phonebook: phonebook.o $(LIBS) $(CXX) -o $@ $(CXXFLAGS) $@.o $(LIBS) bufferTest: bufferTest.o $(LIBS) $(CXX) -o $@ $(CXXFLAGS) $@.o $(LIBS) dictionaryTest: dictionaryTest.o $(LIBS) $(CXX) -o $@ $(CXXFLAGS) $@.o $(LIBS) flagTest: flagTest.o $(LIBS) $(CXX) -o $@ $(CXXFLAGS) $@.o $(LIBS) tlvTest: tlvTest.o $(LIBS) $(CXX) -o $@ $(CXXFLAGS) $@.o $(LIBS) %.o: %.cc $(CXX) -o $@ -c $(CXXFLAGS) $<