TARGET_LIB := libsparklepaw.so SRC_DIR := libsparklepaw BUILD_DIR := build PREFIX ?= /usr/local LIBDIR ?= $(PREFIX)/lib INCLUDEDIR ?= $(PREFIX)/include MANDIR ?= $(PREFIX)/share/man CFLAGS := -Wall -Wextra -flto -funsigned-char ### build mode ifeq ($(mode),debug) CFLAGS += -g -Og BUILD_DIR := $(BUILD_DIR)/debug else CFLAGS += -O3 -DNDEBUG LDFLAGS += -s endif ### automatically populated variables SRCS := $(shell find $(SRC_DIR) -name '*.c') OBJS := $(SRCS:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o) HEADERS := $(shell find $(SRC_DIR) -name '*.h') TARGET := $(BUILD_DIR)/$(TARGET_LIB) ### build targets all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(CFLAGS) -shared -o $@ $(LDFLAGS) $(OBJS) $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c @mkdir -p $(BUILD_DIR) $(CC) $(CFLAGS) -c $< -o $@ ### other targets clean: $(RM) $(OBJS) $(TARGET) install: $(TARGET) $(HEADERS) install -m 755 $(TARGET) $(LIBDIR) install -m 755 -d $(INCLUDEDIR)/libsparklepaw/ install -m 644 $(HEADERS) $(INCLUDEDIR)/libsparklepaw/ uninstall: $(RM) $(LIBDIR)/$(TARGET_LIB) $(RM) -r $(INCLUDEDIR)/libsparklepaw/ doc: doxygen clean-doc: $(RM) -r docs-generated/ ### end .PHONY: all clean install uninstall doc clean-doc