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