make considered harmful

This commit is contained in:
albert 2002-10-10 07:08:13 +00:00
parent a7082d3057
commit c8b28e1405
2 changed files with 45 additions and 38 deletions

View File

@ -1,53 +1,56 @@
# Google "recursive make considered harmful" for how this works. # This file gets included into the main Makefile, in the top directory.
SRC += $(wildcard proc/*.c) $(wildcard proc/*.c) NAME := proc
LIBSRC += $(wildcard proc/*.c)
SONAME := lib$(NAME).so.$(LIBVERSION)
ALL += proc/lib$(NAME).a
INSTALL += $(lib)/lib$(NAME).a
LIB_CFLAGS := $(CFLAGS)
ifeq ($(SHARED),1)
ALL += proc/$(SONAME)
INSTALL += $(lib)/$(SONAME)
LIB_CFLAGS += -fpic
endif
# clean away all output files, .depend, and symlinks
CLEAN += $(addprefix proc/,$(ALL) .depend)
------ ------
# PROJECT SPECIFIC MACROS
NAME = proc
# INSTALLATION OPTIONS # INSTALLATION OPTIONS
TOPDIR = /usr HDRDIR := /usr/include/$(NAME)# where to put .h files
HDRDIR = $(TOPDIR)/include/$(NAME)# where to put .h files LIBDIR := /usr/lib# where to put library files
LIBDIR = $(TOPDIR)/lib# where to put library files HDROWN := $(OWNERGROUP) # owner of header files
SHLIBDIR = /lib# where to put shared library files LIBOWN := $(OWNERGROUP) # owner of library files
HDROWN = $(OWNERGROUP) # owner of header files INSTALL := install
LIBOWN = $(OWNERGROUP) # owner of library files
INSTALL = install
SRC = $(sort $(wildcard *.c) $(filter %.c,$(RCSFILES))) SRC := $(sort $(wildcard *.c) $(filter %.c,$(RCSFILES)))
HDR = $(sort $(wildcard *.h) $(filter %.h,$(RCSFILES))) HDR := $(sort $(wildcard *.h) $(filter %.h,$(RCSFILES)))
OBJ = $(SRC:.c=.o) OBJ := $(SRC:.c=.o)
SONAME = lib$(NAME).so.$(LIBVERSION) proc/lib$(NAME).a: $(OBJ)
ifeq ($(SHARED),1)
CFLAGS += -fpic
all: lib$(NAME).a $(SONAME)
else
all: lib$(NAME).a
endif
lib$(NAME).a: $(OBJ)
$(AR) rcs $@ $^ $(AR) rcs $@ $^
$(SONAME): $(OBJ) proc/$(SONAME): $(OBJ)
gcc -shared -Wl,-soname,$(SONAME) -o $@ $^ -lc gcc -shared -Wl,-soname,$(SONAME) -o $@ $^ -lc
ln -sf $(SONAME) lib$(NAME).so ln -sf $(SONAME) lib$(NAME).so
# AUTOMATIC DEPENDENCY GENERATION -- GCC AND GNUMAKE DEPENDENT # AUTOMATIC DEPENDENCY GENERATION -- GCC AND GNUMAKE DEPENDENT
.depend: .depend:
$(strip $(CC) $(CFLAGS) -MM -MG $(SRC) > .depend) $(strip $(CC) $(LIB_CFLAGS) -MM -MG $(SRC) > .depend)
-include .depend -include .depend
# INSTALLATION # INSTALLATION
install: all install: all
if ! [ -d $(HDRDIR) ] ; then mkdir $(HDRDIR) ; fi if ! [ -d $(HDRDIR) ] ; then mkdir $(HDRDIR) ; fi
$(INSTALL) $(HDROWN) $(HDR) $(TOPDIR)/include/$(NAME) $(INSTALL) $(HDROWN) $(HDR) /usr/include/$(NAME)
$(INSTALL) $(LIBOWN) lib$(NAME).a $(LIBDIR) $(INSTALL) $(LIBOWN) lib$(NAME).a $(LIBDIR)
ifeq ($(SHARED),1) ifeq ($(SHARED),1)
$(INSTALL) $(LIBOWN) $(SONAME) $(SHLIBDIR) $(INSTALL) $(LIBOWN) $(SONAME) $(SHLIBDIR)
@ -58,12 +61,12 @@ endif
# CUSTOM c -> o rule so that command-line has minimal whitespace # CUSTOM c -> o rule so that command-line has minimal whitespace
%.o : %.c %.o : %.c
$(strip $(CC) $(CFLAGS) -c $<) $(strip $(CC) $(LIB_CFLAGS) -c $<)
version.o: version.c version.h version.o: version.c version.h
ifdef MINORVERSION ifdef MINORVERSION
$(strip $(CC) $(CFLAGS) -DVERSION=\"$(VERSION)\" -DSUBVERSION=\"$(SUBVERSION)\" -DMINORVERSION=\"$(MINORVERSION)\" -c version.c) $(strip $(CC) $(LIB_CFLAGS) -DVERSION=\"$(VERSION)\" -DSUBVERSION=\"$(SUBVERSION)\" -DMINORVERSION=\"$(MINORVERSION)\" -c version.c)
else else
$(strip $(CC) $(CFLAGS) -DVERSION=\"$(VERSION)\" -DSUBVERSION=\"$(SUBVERSION)\" -c version.c) $(strip $(CC) $(LIB_CFLAGS) -DVERSION=\"$(VERSION)\" -DSUBVERSION=\"$(SUBVERSION)\" -c version.c)
endif endif

View File

@ -1,8 +1,15 @@
INSTALL += install_ps # This file gets included into the main Makefile, in the top directory.
----- INSTALL += $(bin)ps
all: ps # a file to remove
CLEAN += ps/ps
# a directory for cleaning
DIRS += ps
# a file to create
ALL += ps/ps
ps: escape.o global.o help.o select.o sortformat.o output.o parser.o display.o ps: escape.o global.o help.o select.o sortformat.o output.o parser.o display.o
$(CC) -o ps escape.o global.o help.o select.o sortformat.o output.o parser.o display.o -L../proc -lproc $(CC) -o ps escape.o global.o help.o select.o sortformat.o output.o parser.o display.o -L../proc -lproc
@ -30,10 +37,7 @@ display.o: display.c common.h
stacktrace.o: stacktrace.c stacktrace.o: stacktrace.c
install: ps $(bin)ps: ps
install $(OWNERGROUP) --mode a=rx --strip ps $(BINDIR)/ps install $(OWNERGROUP) --mode a=rx --strip ps $(BINDIR)/ps
install $(OWNERGROUP) --mode a=r ps.1 $(MAN1DIR)/ps.1 install $(OWNERGROUP) --mode a=r ps.1 $(MAN1DIR)/ps.1
-rm -f $(DESTDIR)/var/catman/cat1/ps.1.gz $(DESTDIR)/var/man/cat1/ps.1.gz -rm -f $(DESTDIR)/var/catman/cat1/ps.1.gz $(DESTDIR)/var/man/cat1/ps.1.gz
clean:
rm -f *.o DEADJOE *~ core ps gmon.out