1CC ?= cc
2AR ?= ar
3CFLAGS ?= -std=c11 -Wall -Wextra -Wpedantic -O2 -g
4CPPFLAGS?= -Iinclude -Isrc
5LDFLAGS ?=
6LDLIBS ?=
7
8BUILD := build
9LIBNAME := prairie
10
11SRC := $(wildcard src/*.c)
12OBJ := $(patsubst src/%.c,$(BUILD)/%.o,$(SRC))
13
14PUBLIC_HEADERS := $(wildcard include/prairie/*.h)
15
16.PHONY: all clean test install uninstall
17
18all: $(BUILD)/lib$(LIBNAME).a
19
20# Build directory
21$(BUILD):
22 @mkdir -p $(BUILD)
23
24# Object files
25$(BUILD)/%.o: src/%.c | $(BUILD)
26 $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
27
28# Static library
29$(BUILD)/lib$(LIBNAME).a: $(OBJ)
30 $(AR) rcs $@ $^
31
32clean:
33 rm -rf $(BUILD)
34
35PREFIX ?= /usr/local
36install: all
37 install -d $(DESTDIR)$(PREFIX)/include/prairie
38 install -m 0644 $(PUBLIC_HEADERS) $(DESTDIR)$(PREFIX)/include/prairie/
39 install -d $(DESTDIR)$(PREFIX)/lib
40 install -m 0644 $(BUILD)/lib$(LIBNAME).a $(DESTDIR)$(PREFIX)/lib/
41
42uninstall:
43 rm -f $(DESTDIR)$(PREFIX)/lib/lib$(LIBNAME).a
44 rm -rf $(DESTDIR)$(PREFIX)/include/prairie