home · contact · privacy
MAJOR re-write. Split plomrogue into a server and a client. Re-wrote large parts
[plomrogue] / Makefile
index 69eb0a95ccde9d7698faaa99a7e196cdcb0971e0..c7831bd86e01a79c5abc0a449d2efba192eceff0 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,19 +1,42 @@
-CC=cc
+CC=gcc
 CFLAGS=-Wall -g
-TARGET=roguelike
+TARGET_SERVER=roguelike-server
+TARGET_CLIENT=roguelike-client
 SRCDIR=src
 BUILDDIR=build
-SOURCES=$(shell find $(SRCDIR)/ -type f -name \*.c)
-OBJECTS=$(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.c=.o))
+SERVERDIR=server
+CLIENTDIR=client
+COMMONDIR=common
 
-roguelike: $(OBJECTS)
-       $(CC) $(CFLAGS) -o roguelike $(OBJECTS) -lncurses
+# Build object file lists by building object paths from all source file paths.
+SOURCES_SERVER=$(shell find $(SRCDIR)/$(SERVERDIR)/ -type f -name \*.c)
+SOURCES_CLIENT=$(shell find $(SRCDIR)/$(CLIENTDIR)/ -type f -name \*.c)
+SOURCES_COMMON=$(shell find $(SRCDIR)/$(COMMONDIR)/ -type f -name \*.c)
+OBJECTS_SERVER=$(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES_SERVER:.c=.o))
+OBJECTS_CLIENT=$(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES_CLIENT:.c=.o))
+OBJECTS_COMMON=$(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES_COMMON:.c=.o))
 
-$(BUILDDIR)/%.o: $(SRCDIR)/%.c
-       mkdir -p $(BUILDDIR); $(CC) $(CFLAGS) -c $< -o $@
+# "make" without further specifications builds both server and client.
+default : $(TARGET_SERVER) $(TARGET_CLIENT)
 
-.PHONY: clean
-clean:
-       rm $(OBJECTS)
-       rmdir $(BUILDDIR)
-       rm $(TARGET)
+# "make roguelike-server" builds only the server.
+$(TARGET_SERVER) : $(OBJECTS_SERVER) $(OBJECTS_COMMON)
+       $(CC) $(CFLAGS) -o $(TARGET_SERVER) $(OBJECTS_SERVER) $(OBJECTS_COMMON)
+
+# "make roguelike-client" builds only the ncurses client.
+$(TARGET_CLIENT) : $(OBJECTS_CLIENT) $(OBJECTS_COMMON)
+       $(CC) $(CFLAGS) -o $(TARGET_CLIENT) $(OBJECTS_CLIENT) $(OBJECTS_COMMON)\
+        -lncurses
+
+# Build respective object file to any source file. Create build dirs as needed.
+$(BUILDDIR)/%.o : $(SRCDIR)/%.c
+       mkdir -p $(@D)
+       $(CC) $(CFLAGS) -c $< -o $@
+
+# "make clean" to tries to delete all files that could possibly have been built.
+# Declare target "phony", i.e. this is not about building a file.
+.PHONY : clean
+clean :
+       rm -rf $(BUILDDIR)
+       rm -f $(TARGET_SERVER)
+       rm -f $(TARGET_CLIENT)