CC = gcc CFLAGS = -Wall -g -c -std=gnu99 LDFLAGS = -lm BUILD_DIR = build COMMON_OBJ_FILES = $(patsubst %.c,$(BUILD_DIR)/%.o,$(wildcard common/*.c)) CLIENT_OBJ_FILES = $(patsubst %.c,$(BUILD_DIR)/%.o,$(wildcard client/*.c)) SERVER_OBJ_FILES = $(patsubst %.c,$(BUILD_DIR)/%.o,$(wildcard server/*.c)) .PHONY: all clean all: http_client http_server clean: rm -rf $(BUILD_DIR) rm -f http_client rm -f http_server http_client: $(BUILD_DIR)/client $(BUILD_DIR)/common $(COMMON_OBJ_FILES) $(CLIENT_OBJ_FILES) $(CC) -o $@ $(LDFLAGS) $(filter-out $(BUILD_DIR)/common $(BUILD_DIR)/client,$^) http_server: $(BUILD_DIR)/server $(BUILD_DIR)/common $(COMMON_OBJ_FILES) $(SERVER_OBJ_FILES) $(CC) -o $@ $(LDFLAGS) $(filter-out $(BUILD_DIR)/common $(BUILD_DIR)/server,$^) $(BUILD_DIR)/%.o: %.c $(CC) $(CFLAGS) -o $@ $< $(BUILD_DIR)/server: $(BUILD_DIR) mkdir -p $(BUILD_DIR)/server $(BUILD_DIR)/client: $(BUILD_DIR) mkdir -p $(BUILD_DIR)/client $(BUILD_DIR)/common: $(BUILD_DIR) mkdir -p $(BUILD_DIR)/common $(BUILD_DIR): mkdir -p $(BUILD_DIR)