diff --git a/Makefile b/Makefile index 7146e72..13c45fd 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,14 @@ CFLAGS = -O2 -Wall -I./libs -pthread CXXFLAGS = -std=c++17 -O2 -Wall -I./libs -pthread UNAME_S := $(shell uname -s) BREW_PREFIX := $(shell brew --prefix portaudio 2>/dev/null) - +CACHE_DIR = cache +OUT_DIR = out +TARGET = $(OUT_DIR)/cerberus +SRCS_CPP = main.cpp commands.cpp cli.cpp webserver.cpp sound.cpp bfsk.cpp x25519_handshake.cpp +SRCS_C = libs/monocypher.c libs/linenoise.c +OBJS_CPP = $(patsubst %.cpp, $(CACHE_DIR)/%.o, $(SRCS_CPP)) +OBJS_C = $(patsubst libs/%.c, $(CACHE_DIR)/%.o, $(SRCS_C)) +OBJS = $(OBJS_CPP) $(OBJS_C) ifneq ($(UNAME_S),) ifeq ($(UNAME_S),Darwin) ifneq ($(BREW_PREFIX),) @@ -29,24 +36,24 @@ endif endif endif -SRCS_CPP = main.cpp commands.cpp cli.cpp webserver.cpp sound.cpp bfsk.cpp x25519_handshake.cpp -SRCS_C = libs/monocypher.c libs/linenoise.c -OBJS_CPP = $(SRCS_CPP:.cpp=.o) -OBJS_C = $(SRCS_C:.c=.o) -TARGET = cerberus - .PHONY: all clean all: $(TARGET) -$(TARGET): $(OBJS_CPP) $(OBJS_C) +$(TARGET): $(OBJS) | $(OUT_DIR) $(CXX) $(CXXFLAGS) -o $@ $^ $(LIBS) -%.o: %.cpp +$(CACHE_DIR)/%.o: %.cpp | $(CACHE_DIR) $(CXX) $(CXXFLAGS) -c $< -o $@ -%.o: %.c +$(CACHE_DIR)/%.o: libs/%.c | $(CACHE_DIR) $(CC) $(CFLAGS) -c $< -o $@ +$(CACHE_DIR): + mkdir -p $(CACHE_DIR) + +$(OUT_DIR): + mkdir -p $(OUT_DIR) + clean: - rm -f $(TARGET) *.o libs/*.o + rm -f $(TARGET) $(CACHE_DIR)/*.o