X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=Makefile;h=90f9d3d94966421d0f16474a58357adfad2c0f6c;hb=8bb15b1dd0927add217ff8ff4ef4e002dc49bff3;hp=e03bf66b81765e6def5abb7a416c956c6c589aa5;hpb=4618e826a4ebe5e60e1d2c419fca7da71657bf9b;p=odcread.git diff --git a/Makefile b/Makefile index e03bf66..90f9d3d 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,34 @@ -HEADERS=oberon.h store.h reader.h domain.h +MODULES := reader store alien typeregister textmodel fold -odcread: odcread.o reader.o store.o util.o +# Add module directories to the include path +CFLAGS += -I. + +# Variables for the modules to write to +SRCS := odcread.cc + +# Include module definitions +include $(patsubst %,%/Make.inc,$(MODULES)) + +# This rule just links the object files together +odcread: $(SRCS:.cc=.o) g++ -o $@ $^ -%.o: %.cc $(HEADERS) - g++ -c -I. -o $@ $< +# This rule build an object (.o) from a source (.cc). It first builds a +# dependency (.d) file which will ensure that the .o is rebuilt whenever the +# header files included by the .cc are updated. +# The options given to GCC for this are as follows: +# -MM : calculate dependencies, but exclude system headers +# -MF : output dependencies to the given file +# -MP : generate "header.h:" rules to avoid errors on deletion of headers +# -MT : the main rule has the given target (to handle subdirs correctly) +# The .d file is not an explicit target because it will need to be (re-)built +# if and only if the .o needs to be rebuilt. +%.o: %.cc + g++ $(CFLAGS) $< -MM -MF $*.d -MP -MT $@ + g++ $(CFLAGS) $< -c -o $@ + +clean: + rm -f odcread *.d *.o */*.o */*.d + +# Include the generated dependency files (if they exist) +-include $(SRCS:.cc=.d)