BINARY ?= obj/lprotoc CXXFLAGS += -Isrc -I. $(shell pkg-config --cflags protobuf) LDFLAGS += $(shell pkg-config --libs protobuf) # Echo function << := @echo ifneq ($(shell eval 'echo -e'),-e) << += -e endif <> := obj/system.lex.o obj/system.tab.o obj/system.pb.o all: $(BINARY) doc %.lex.cc: %.flex $(<<) " LEX\t" $(<:src/%=%) @flex -+ -o $(@) $(<) %.tab.cc: %.yy $(<<) "BISON\t" $(<:src/%=%) $(@:src/%=%) @bison -o $(@) $(<) %.tab.hh: %.yy $(<<) "BISON\t" $(<:src/%=%) $(@:src/%=%) @bison -o /dev/null --header=$(@) $(<) %.pb.cc %.pb.h: %.proto $(<<) "PROTOC" $(<) @protoc --cpp_out=. $(<) src/system.lex.cc: src/system.tab.hh src/system.tab.cc: src/system.pb.h obj/%.o: src/%.cc $(<<) " CXX\t" $(<:src/%=%) @mkdir -p $(shell dirname $(@)) @$(CXX) -c $(<) -o $(@) $(CXXFLAGS) doc/%.tab.gv: src/%.yy $(<<) "BISON\t" $(<:src/%=%) $(@:doc/%=%) @mkdir -p $(shell dirname $(@)) @bison -o $(<:src/%.yy=.%.gv.tab) --graph=$(@) $(<) @$(RM) $(<:src/%.yy=.%.gv.tab) doc/%.tab.html: src/%.yy $(<<) "BISON\t" $(<:src/%=%) $(@:doc/%=%) @mkdir -p $(shell dirname $(@)) @bison -o $(<:src/%.yy=.%.html.tab) --html=$(@) $(<) @$(RM) $(<:src/%.yy=.%.html.tab) $(<:src/%.yy=.%.html.xml) doc/%.tab.xml: src/%.yy $(<<) "BISON\t" $(<:src/%=%) $(@:doc/%=%) @mkdir -p $(shell dirname $(@)) @bison -o $(<:src/%.yy=.%.xml.tab) --xml=$(@) $(<) @$(RM) $(<:src/%.yy=.%.xml.tab) $(BINARY): $(<>) $(<<) "LINK\t" $(^:obj/%=%) @$(CXX) $(^) -o $(@) $(LDFLAGS) clean: $(<<) " RM\t" $(wildcard obj/** doc/**) @$(RM) -f $(wildcard obj/** doc/**) doc: doc/system.tab.gv doc/system.tab.html doc/system.tab.xml .PHONY: all clean install uninstall test doc .INTERMEDIATE: src/system.lex.cc src/system.pb.h src/system.tab.cc src/system.tab.hh