CFLAGS = -g -O2 -Wall -Wextra -Isrc -Lbuild -rdynamic -DNDEBUG $(OPTFLAGS) LDLIBS = -ldl $(OPTLIBS) PREFIX ?= /usr/local SOURCES = $(wildcard src/**/*.c src/*.c) OBJECTS = $(patsubst %.c,%.o,$(SOURCES)) TEST_SRC = $(wildcard tests/*_tests.c) TESTS = $(patsubst %.c,%,$(TEST_SRC)) LIBNAME = YOUR_LIBRARY TARGET = build/lib$(LIBNAME).a SO_TARGET = $(patsubst %.a,%.so,$(TARGET)) # The Target Build all: $(TARGET) $(SO_TARGET) tests dev: CFLAGS = -g -Wall -Isrc -Wall -Wextra $(OPTFLAGS) dev: all $(TARGET): CFLAGS += -fPIC $(TARGET): build $(OBJECTS) $(AR) rcs $@ $(OBJECTS) ranlib $@ $(SO_TARGET): $(TARGET) $(OBJECTS) $(CC) -shared -o $@ $(OBJECTS) build: @mkdir -p build @mkdir -p bin # The Unit Tests .PHONY: tests tests: LDLIBS += -static -l$(LIBNAME) tests: ./tests/runtests $(TESTS) ./tests/runtests valgrind: VALGRIND="valgrind --log-file=/tmp/valgrind-%p.log" $(MAKE) # The Cleaner clean: rm -rf build $(OBJECTS) $(TESTS) rm -f tests/tests.log tests/runtests find . -name "*.gc*" -exec rm {} \; rm -rf `find . -name "*.dSYM" -print` # The Install install: all install -d $(DESTDIR)/$(PREFIX)/lib/ install $(TARGET) $(DESTDIR)/$(PREFIX)/lib/ # The Checker BADFUNCS='[^_.>a-zA-Z0-9](str(n?cpy|n?cat|xfrm|n?dup|str|pbrk|tok|_)|stpn?cpy|a?sn?printf|byte_)' check: @echo Files with potentially dangerous functions @egrep $(BADFUNCS) $(SOURCES) || true