.POSIX: .SUFFIXES: .c .o -include .sources.mk LIBNAME = lib<name here> BIN = $(SRC:.c=) OBJ = $(BIN:=.o) LIB = $(LIBNAME:=.a) all generate-sources $(LIB) .PRECIOUS: $(OBJ) $(LIB): $(OBJ) $(AR) -rc $@ $? .c.o: $(CC) $(CFLAGS) $(CPPFLAGS) -s -c $< clean: rm -f $(LIB) $(OBJ) .sources.mk generate-sources: .sources.mk .sources.mk: FORCE @set -e;\ files=$$(ls -1 *.c 2>/dev/null | sort | tr '\n' ' ');\ src=$$(printf 'SRC=%s\n' "$$files");\ last='SRC=\n';\ if [ -f .sources.mk ]; then\ last=$$(grep 'SRC=' .sources.mk);\ fi;\ if [ "$$src" != "$$last" ]; then\ echo "$$src" > .sources.mk;\ fi FORCE: