INC = -Ibuild -Isource/include -I/usr/include/zdb -Igoogletest/googletest/include LIB = -Lbuild -Lgoogletest/googletest UNITTESTLIBS = -lzdb -lpthread -lgtest_main -lgtest SOLIBS = -lzdb -lpthread CXXSOURCE = $(wildcard source/*.cc) CSOURCE = $(wildcard source/*.c) HEADERS = $(wildcard source/include/*.h source/include/*.hh) SOURCE = $(CSOURCE) $(CXXSOURCE) COBJ = $(CSOURCE:source/%.c=build/%.o) CXXOBJ = $(CXXSOURCE:source/%.cc=build/%.o) OBJ = $(COBJ) $(CXXOBJ) UNITTEST_CXXSOURCE = $(wildcard unittest/*.cc) UNITTEST_CXXOBJ = $(UNITTEST_CXXSOURCE:unittest/%.cc=build/unittest/%.o) UNITTEST_TARGETS = $(UNITTEST_CXXOBJ:%.o=%) UNITTEST_LOGS = $(UNITTEST_TARGETS:%=%.xml) PRECOMPILED_HEADERS = $(HEADERS:source/include/%.hh=build/%.hh.gch) TESTDBS = $(UNITTEST_TARGETS:build/unittest/%=build/unittest/%.db) LIBTARGETS = build/libinvdb.so CXXDEPEND = $(CXXSOURCE:source/%.cc=build/%.cc.d) \ $(UNITTEST_CXXSOURCE:unittest/%.cc=build/unittest/%.cc.d) HEADERDEPEND = $(HEADERS:source/include/%.hh=build/%.hh.d) DEPEND = $(CXXDEPEND) $(HEADERDEPEND) TARGETS = $(LIBTARGETS) $(UNITTEST_TARGETS) UNITTEST_LD_LIBRARY_PATH = build .PRECIOUS: $(DEPEND) $(OBJ) $(UNITTEST_CXXOBJ) $(UNITTEST_LOGS) \ $(PRECOMPILED_HEADERS) .SECONDARY: $(DEPEND) $(OBJ) $(UNITTEST_CXXOBJ) $(UNITTEST_LOGS) \ $(PRECOMPILED_HEADERS) CC := gcc CXX := g++ LD := g++ CXXFLAGS := -std=c++14 -g -fPIC -Wno-virtual-move-assign -Wno-format-security SOFLAGS := -shared .PHONY: all depend clean mrproper googletest submodules test \ clean_testresults directories all: directories depend $(TARGETS) test depend: $(DEPEND) clean: clean_testresults rm -f build/*.o rm -f build/unittest/*.o rm -f $(TARGETS) rm -f $(UNITTEST_LOGS) rm -f build/unittest/*.db rm -f $(PRECOMPILED_HEADERS) clean_testresults: rm -f $(UNITTEST_TARGETS) mrproper: clean rm -f build/*.d rm -f build/unittest/*.d cd googletest && make clean cd googletest/googletest && make clean googletest: git submodule init git submodule update googletest cd googletest && cmake . && make cd googletest/googletest && cmake . && make submodules: googletest directories: mkdir -p build/unittest mkdir -p googletest test: $(UNITTEST_LOGS) build/unittest/%.db: data/clean.db cp $< $@ build/unittest/%.xml: build/unittest/% build/unittest/%.db LD_LIBRARY_PATH=$(UNITTEST_LD_LIBRARY_PATH) $< --gtest_output=\"xml:$@\"\ \sqlite://$(CURDIR)/$<.db 2>&1 build/%.cc.d: source/%.cc $(CXX) -MM $< -o $@ $(INC) $(CXXFLAGS) build/%.o: source/%.cc build/%.cc.d $(PRECOMPILED_HEADERS) $(CXX) -c $< -o $@ $(INC) $(CXXFLAGS) build/%.so: $(OBJ) $(LD) $(SOFLAGS) $(OBJ) $(SOLIBS) -o $@ build/unittest/%.cc.d: unittest/%.cc $(CXX) -MM $< -o $@ $(INC) $(CXXFLAGS) build/unittest/%.o: unittest/%.cc build/unittest/*.cc.d $(PRECOMPILED_HEADERS) $(CXX) $(INC) -c $(CXXFLAGS) $< -o $@ build/unittest/%: build/unittest/%.o $(LIBTARGETS) $(LD) $(LIB) $< $(LIBTARGETS:build/lib%.so=-l%) \ $(UNITTESTLIBS) -o $@ build/%.hh.d: source/include/%.hh $(CXX) $(INC) -MM $(CXXFLAGS) $< -o $@ build/%.hh.gch: source/include/%.hh build/%.hh.d $(CXX) $(INC) -c $(CXXFLAGS) $< -o $@ include $(wildcard build/*.d) include $(wildcard build/unittest/*.d)