ECHO=echo ifndef OS OS=$(shell uname) endif CFLAGS=-Wall -pedantic -std=c99 -O2 -g -DASSERT_CORE -DHAVE_HSTRERROR ifeq ($(OS), FreeBSD) CFLAGS+= -DHAVE_POLL_H endif ifeq ($(OS), Linux) CFLAGS+= -DHAVE_SYS_POLL_H -D_GNU_SOURCE -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 endif CFLAGS+=$(EXTRAFLAGS) CC=gcc AR=ar RANLIB=ranlib LD=ld LIB=-lm $(EXTRALIB) INCLUDE=-I$(topbuilddir)/include -I. $(EXTRAINCLUDE) ARFLAGS=rcv LDFLAGS=-r ifdef SUBOBJ SUBSYS=SUBSYS.o endif ifdef SUBDIRS SUBDIROBJS := $(SUBDIRS:%=%/SUBSYS.o) endif .SUFFIXES: .o.c .c.o: $(CC) $(CFLAGS) $(INCLUDE) -c $< all: $(SUBSYS) $(LIBRARY) $(PROGRAM) define prog_dep $(1): $$(PROGRAMOBJ_$(1)) endef $(foreach prog,$(PROGRAM),$(eval $(call prog_dep,$(prog)))) ifdef PROGRAM ifdef LIBRARY $(PROGRAM): $(LIBRARY) endif $(PROGRAM): %: %.o $(CC) -o $@ $< $(PROGRAMOBJ_$(@)) $(LIBRARY) $(LIB) endif ifdef LIBRARY $(LIBRARY): $(LIBOBJ) $(SUBDIROBJS) $(AR) $(ARFLAGS) $@ $(LIBOBJ) $(SUBDIROBJS) $(RANLIB) $@ endif ifdef SUBOBJ $(SUBSYS): $(SUBOBJ) $(LD) $(LDFLAGS) -o $@ $(SUBOBJ) endif ifdef SUBDIRS $(SUBDIROBJS): $(SUBDIRS:%=%-recursive) ; $(SUBDIRS:%=%-recursive): $(MAKE) -C $(subst -recursive,,$@) -f Makefile OS=$(OS) SUBSYS.o endif clean: ifdef LIBOBJ rm -rf $(LIBOBJ) endif ifdef PROGRAM rm -rf $(PROGRAM) rm -rf $(foreach P, $(PROGRAM), $P.o $(PROGRAMOBJ_$(P))) rm -rf *core core.* endif ifdef LIBRARY rm -rf $(LIBRARY) endif ifdef SUBOBJ rm -rf $(SUBOBJ) $(SUBSYS) endif ifdef SUBDIRS for dir in $(SUBDIRS); do $(MAKE) -f Makefile -C $$dir OS=$(OS) clean || exit; done endif