--- a/Makefile +++ b/Makefile @@ -5,20 +5,15 @@ VERPAT = 7 VERSION = $(VERMAJ).$(VERMIN).$(VERPAT) -# Define SHARED as 1 for Linux shared ELF library -#SHARED = 1 - -ifeq ($(SHARED),1) LIBTARGET = lib$(DIST).so.$(VERSION) LIBTARGETSO = lib$(DIST).so LIBTARGETSOMAJ = $(LIBTARGETSO).$(VERMAJ) CCSHRD = -fPIC -else -LIBTARGET = lib$(DIST).a -endif + +LIBTARGETA = lib$(DIST).a LIBHEAD = $(DIST).h -TARGETS = $(LIBTARGET) +TARGETS = $(LIBTARGET) $(LIBTARGETA) INSTBASEDIR = /usr/local INSTLIBDIR = $(INSTBASEDIR)/lib @@ -27,12 +22,12 @@ INSTALLPROG = install -m 755 MKDIRP = install -d -m 755 -CC = gcc -OPTIM = -O2 - -INCDIR = -I. - -CCOPT = -s -Wall $(OPTIM) $(INCDIR) +CC ?= gcc +AR ?= ar +ARFLAGS ?= rc +RANLIB ?= ranlib +CPPFLAGS += -I. +CFLAGS += -Wall # Object files to store in the library LIBOBJS = shhopt.o @@ -43,21 +38,19 @@ # don't worry if you get ranlib not found errors. This probably means # that your ar does an implicit ranlib and you do not need to run ranlib # separately. This error is harmless. -$(LIBTARGET): $(LIBOBJS) -ifeq ($(SHARED),1) - $(CC) -shared -Wl,-soname,$(LIBTARGETSOMAJ) -o $(LIBTARGET) $(LIBOBJS) -else - ar rc $(LIBTARGET) $(LIBOBJS) - ranlib $(LIBTARGET) || true -endif +$(LIBTARGET): $(LIBOBJS:.o=.lo) + $(CC) $(CFLAGS) $(LDFLAGS) -shared -Wl,-soname,$(LIBTARGETSOMAJ) -o $@ $^ +$(LIBTARGETA): $(LIBOBJS) + $(AR) $(ARFLAGS) $@ $^ + $(RANLIB) $@ # Note that you may need GNU's -liberty if your libc lacks strtoul example: $(LIBTARGET) example.o $(CC) -o example example.c \ -L. -I. -L$(INSTLIBDIR) -I$(INSTINCDIR) -lshhopt -.c.o: - $(CC) $(CCSHRD) -o $@ -c $(CCOPT) $< +%.lo: %.c + $(COMPILE.c) $(CCSHRD) $^ -o $@ depend dep: $(CC) $(INCDIR) -MM *.c >depend @@ -73,7 +66,7 @@ endif clean: - rm -f *.o core *~ depend + rm -f *.o *.lo *.so* *.a core *~ depend chmod: chmod a+r *