Here is the makefile I use (with gmake - you need to run "touch depends"
first to get started):


ifeq ($(TARGET), LINUX_RED_HAT)

  BASE = /usr/local/dx
  QSH  = /home/mnoz/qsh   <--- some special local libs

  # Commands to execute when "all:" is built.
  ALL_COMMANDS := # ln -fs dxmenu.qhd_NYU dxmenu.qhd;
                  # cp -f  Dxmenu.ad_NYU  $(HOME)/Dxmenu;

  FLAG_OPT = -O

  CC=gcc

  CFLAGS_COMMON = -Dlinux -I$(BASE)/include -I$(QSH)/sublib -DSystemV 
-DMalloc_DEF -DNYU_QSH -DLINUX_VERSION -DRED_HAT_LINUX -DSTPM

  CFLAGS_DEV    = $(CFLAGS_COMMON) $(FLAG_DEV) 
  CFLAGS_OPT    = $(CFLAGS_COMMON) $(FLAG_OPT) 
  CFLAGS_INT    = $(CFLAGS_COMMON) $(FLAG_OPT) -fPIC

  LIBS         =  -liq -lGL -lMagick -lDXcallm -lmfhdf -ldf -lz -ljpeg -lcdf 
-lnetcdf -lm -lXm -lXt -lX11 -ldl -lnsl
  LIBS_INTS    =  -lm -lc 
  LDFLAGS      =  -L$(QSH)/sub_linux -L$(BASE)/lib_linux -L/usr/local/cdf/lib 
-L/usr/lib -L/usr/local/lib -Wl,-E 
  LDFLAGS_INTS =  --shared -E -G -e DXEntry

endif


# These sources will be NON-optimized by default (CFLAGS_DEV)
# Put sources here while unstable or under development.
SRC_DEV := \
  (list of sources compiled with -g)

# These sources will be optimized by default (CFLAGS_OPT).
# Put sources here when stable or not under immediate development.
SRC_OPT := \
  (list of optimized sources )


SRC_INT := \
        (list of sources which use the dx interactors)

INTERACTORS := $(BINDIR)/interactors
DXMENU      := $(BINDIR)/dxmenu

OBJ_DEV := $(patsubst %.c,$(OBJDIR)/%.o,$(SRC_DEV))
OBJ_TAR := $(patsubst %.c,$(OBJDIR)/%.o,$(SRC_TAR))
OBJ_OPT := $(patsubst %.c,$(OBJDIR)/%.o,$(SRC_OPT))
OBJ_INT := $(patsubst %.c,$(OBJDIR)/%.o,$(SRC_INT))

# How to compile the different object sets.
$(OBJ_DEV) : $(OBJDIR)/%.o : %.c
        $(CC) -c $(CFLAGS_DEV) $< -o $@
$(OBJ_TAR) : $(OBJDIR)/%.o : %.c
        $(CC) -c $(CFLAGS_DEV) $< -o $@
$(OBJ_OPT) : $(OBJDIR)/%.o : %.c
        $(CC) -c $(CFLAGS_OPT) $< -o $@
$(OBJ_INT) : $(OBJDIR)/%.o : %.c
        $(CC) -c $(CFLAGS_INT) $< -o $@
setup:
        if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi; \
        if [ ! -d $(BINDIR) ]; then mkdir $(BINDIR); fi; \
        if [ ! -d $(LIBDIR) ]; then mkdir $(LIBDIR); fi;

dxmenu: $(OBJ_DEV) $(OBJ_OPT) $(OBJ_TAR)
        $(CC) $(CFLAGS_DEV) -o $(DXMENU) $(OBJ_DEV) $(OBJ_OPT) $(OBJ_TAR) 
$(LDFLAGS) $(LIBS)

interactors: $(OBJ_INT)
          rm -f $(INTERACTORS) ; \
          $(CC) $(LDFLAGS_INTS) -o $(INTERACTORS) $(OBJ_INT) $(LIBS_INTS) ; \

third:
        atom dxmenu -tool third -A1 -all

depend:
        touch depends
        makedepend    -fdepends -p$(OBJDIR)/ -- $(CFLAGS_DEV) -- $(SRC_DEV)
        makedepend -a -fdepends -p$(OBJDIR)/ -- $(CFLAGS_OPT) -- $(SRC_OPT)
        makedepend -a -fdepends -p$(OBJDIR)/ -- $(CFLAGS_INT) -- $(SRC_INT)
        makedepend -a -fdepends -p$(OBJDIR)/ -- $(CFLAGS_INT) -- $(SRC_TAR)
clean:
        # The *.opt and *.noopt versions are created outside of here.
        rm -f \
        $(OBJ_DEV) \
        $(OBJ_TAR) \
        $(OBJ_OPT) \
        $(OBJ_INT) \
        $(DXMENU) $(INTERACTORS)
        gmake depend

cleanall:
        gmake OPTIMIZE=0 clean
        gmake OPTIMIZE=1 clean

rmobj:
        rm -f $(OBJ_DEV) $(OBJ_OPT) $(OBJ_TAR) $(OBJ_OTH)

# This includes all the dependencies from makedepend.
include depends










Reply via email to