X-Git-Url: https://plomlompom.com/repos/index.html?a=blobdiff_plain;f=Makefile;h=6a6fe5b7a9fdd537a74a5c49d9904a87bb187768;hb=39ab34a368fbe30dc6639e021da89b1a20243fd6;hp=5b7f7d9c321812b9d3c8e512b849441c08a430a2;hpb=a470e49ace2874380e6018a6166dd2a61e3c689c;p=plomrogue
diff --git a/Makefile b/Makefile
index 5b7f7d9..6a6fe5b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,42 @@
-roguelike:
- cc -Wall -g -o windows.o -c windows.c
- cc -Wall -g -o draw_wins.o -c draw_wins.c
- cc -Wall -g -o roguelike.o -c roguelike.c
- cc -Wall -g -o roguelike windows.o draw_wins.o roguelike.o -lncurses
-
-clean:
- rm *.o; rm roguelike
+CC=gcc
+CFLAGS=-Wall -Wextra -Werror -g
+TARGET_SERVER=roguelike-server
+TARGET_CLIENT=roguelike-client
+SRCDIR=src
+BUILDDIR=build
+SERVERDIR=server
+CLIENTDIR=client
+COMMONDIR=common
+
+# 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))
+
+# "make" without further specifications builds both server and client.
+default : $(TARGET_SERVER) $(TARGET_CLIENT)
+
+# "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)