CC := /usr/bin/gcc CFLAGS = -Wall -Wpedantic -I$(INC_DIR) -O2 -fPIC LDFLAGS := -shared LDLIBS := -lm # DIRS BASE_DIR = $(pwd) SRC_DIR = src BIN_DIR = bin OBJ_DIR = obj LIB_DIR := lib BUILD_DIR = build INC_DIR = include EXAMPLE_DIR = example # TARGETS LIBBALLISTIC := $(LIB_DIR)/libballistic.so EXAMPLE := $(BIN_DIR)/example SOURCES := $(wildcard $(SRC_DIR)/*.c) OBJECTS := $(SOURCES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o) TARGET := $(LIBBALLISTIC) # ALL TARGET all: $(TARGET) # COMPILE MAIN TARGET $(TARGET): $(OBJECTS) | $(BIN_DIR) @mkdir -p lib $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS) # COMPILE OBJECTS $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c | $(BUILD_DIR) $(CC) $(CFLAGS) -c $< -o $@ # COMPILE EXAMPLE $(EXAMPLE): $(EXAMPLE_DIR)/*.c $(CC) $(CFLAGS) -L./lib -o $@ $^ -lballistic # MAKE DIRS $(BUILD_DIR): mkdir -p $(BUILD_DIR) $(BIN_DIR): mkdir -p $(BIN_DIR) # CLEAN clean: rm -rf $(BIN_DIR) rm -rf $(BUILD_DIR) distclean: clean git submodule deinit --all -f .PHONY: all clean