Modularize the source code.

This makes greeting generation separate from greeting output, which
makes it easier to unit-test greeting generation.

Change-Id: Ice07f45ed0e9274bd4d4b3cd031cb37fffd34a5e
diff --git a/makefile b/makefile
index 539a1ee..26607eb 100644
--- a/makefile
+++ b/makefile
@@ -1,11 +1,23 @@
 .PHONY: all clean
 
-all: hello-world-ng
+CXX = c++
+LDFLAGS =
+CXXFLAGS = -I.
+
+EXE = exe/hello-world-ng
+
+mod_OBJ = mod/greeting.o
+hello_world_ng_OBJ = exe/hello-world-ng.o
+
+OBJ = $(hello_world_ng_OBJ) $(mod_OBJ)
+
+all: $(EXE)
 
 clean:
-	$(RM) hello-world-ng.o hello-world
+	$(RM) $(OBJ)
+	$(RM) $(EXE)
 
-hello-world-ng: hello-world-ng.o
+exe/hello-world-ng: $(hello_world_ng_OBJ) $(mod_OBJ)
 	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^
 
 %.o: %.cpp