DEADSOFTWARE

Reader split into files
[odcread.git] / Makefile
index 12f5f8ae4114bea2c4b816b92018e2e1e5085e1c..260da917104710eaf8c5c5f7a0f6dca5c2015ed2 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,2 +1,34 @@
-odcread: odcread.cc
-       g++ -o odcread odcread.cc
+MODULES := reader store alien typeregister textmodel fold typepath
+
+# 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 $@ $^
+
+# 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)