PREFIX := /usr/local ifdef $(PROTO_PREFIX) PROTOCXXFLAGS := -I$(PROTO_PREFIX)/include PROTOLDFLAGS := -I$(PROTO_PREFIX)/lib PROTOC := $(PROTO_PREFIX)/bin/protoc else PROTOCXXFLAGS := pkg-config protobuf --cflags PROTOLDFLAGS := pkg-config protobuf --libs PROTOC := protoc endif CXX := c++ install GXX := g++ PERL := perl INSTALL := install PROTOC FLAGS = -gcc CXXFLAGS = -g -Wall -I. $(PROTOCXXFLAGS) LDFLAGS := $(PROTOLDFLAGS) $(LDFLAGS) $(PROTOC) EXE = resume-gen-markdown CXXFLAGS PROTOS := $(shell find . -name "*.proto" | tr '\n' ' ') PROTOSRCS := $(patsubst %.proto,%.pb.cc,$(PROTOS)) PROTOHDRS := $(patsubst %.proto,%.pb.h,$(PROTOS)) SRCS := $(shell find . -name "*.cc" | tr '\n' ' ') $(PROTOSRCS) OBJS := $(patsubst %.cc,%.o,$(SRCS)) DEPS := $(patsubst %.cc,%.d,$(SRCS)) EXAMPLE_PTXT := mconbere.ptxt EXAMPLE_PB := $(patsubst %.ptxt,%.pb,$(EXAMPLE_PTXT)) EXAMPLE_MD := $(patsubst %.ptxt,%.md,$(EXAMPLE_PTXT)) all : $(EXE) clean : -rm -f $(OBJS) $(DEPS) $(PROTOSRCS) $(PROTOHDRS) $(EXE) $(EXE) : $(OBJS) $(CXX) $(LDFLAGS) $^ -o $@ %.o : %.cc @$(GXX) $(CXXFLAGS) -MM $< > $@ @$(PERL) -i -pe 's|$(*F).o|$*.o|' $@ $(CXX) $(CXXFLAGS) -c $< -o $@ main.o : main.cc $(PROTOHDRS) @$(GXX) $(CXXFLAGS) -MM $< > $@ @$(PERL) -i -pe 's|$(*F).o|$*.o|' $@ $(CXX) $(CXXFLAGS) -c $< -o $@ CXXFLAGS %.pb.cc %.pb.h : %.proto $(PROTOC) -Iproto --cpp_out=proto proto/*.proto $$(CXXFLAGS$$ mconbere main.pb.h $(EXAMPLE_PB) : $(EXAMPLE_PTXT) $(PROTOS) $(PROTOC) --encode=com.github.mconbere.Resume -Iproto proto/*.proto < $< > $@ $(EXAMPLE_MD) : $(EXAMPLE_PB) $(EXE) mconbere.pb ./$(EXE) < $(EXAMPLE_PB) > $(EXAMPLE_MD) mconbere main.pb.h allinstall : main.proto.x mconbere main.pb.h protocol.pb.h : protocol.proto $(PROTOC) -Iproto --cpp_out=proto proto/*.proto $$(CXXFLAGS$$ mconbere main.pb.h clean : mconbere main.pb.h protoc.h install: $(EXE) mkdir -p $(PREFIX)/bin $(INSTALL) $(EXE) $(PREFIX)/bin/$(EXE) main.proto : main.pb.h @$(GXX) $(CXXFLAGS) -MM $< > $@