1# Makefile Template v1.2 2# Written by Milton Ngan (milton@comp.vuw.ac.nz) 3# Updated Wednesday 10 August 1994 4# Written Friday 1st April 1994 5# 6 7# v1.2 Changes 8# 9# Added in Lex source file support, will probably add Yacc at some stage as 10# well :-) 11 12# v1.1 Changes 13# 14# Updated .depend rule so that is creates a .depend for each source file 15# this is more efficient. Also added HEADERS so that dependencies also depend 16# on the header files. This is so that inter header dependecies will cause the 17# appropriate dependency changes 18 19MAKETEMPL = ./MakeTempl 20LSRCS = $(LXSRCS:%.l=%.c) 21YSRCS = $(YCSRCS:%.y=%.tab.c) 22YHEADERS = $(YCSRCS:%.y=%.tab.h) 23SRCS = $(CSRCS) $(CCSRCS) $(LSRCS) $(YSRCS) 24OBJS += $(ASRCS:%.s=%.o) $(CSRCS:%.c=%.o) $(CCSRCS:%.cpp=%.o) $(LXSRCS:%.l=%.o) $(YCSRCS:%.y=%.tab.o) 25DEPENDS = $(SRCS:%=%.dep) 26ARFLAGS += 27DO_MAKE = @ for i in $(SUBDIRS); do $(MAKE) -C $$i ; done 28DO_CLEAN = @ for i in $(SUBDIRS); do $(MAKE) -C $$i clean ; done 29 30%.o: %.cpp 31 $(CC) -c $(CFLAGS) $(INCS) $(DEFINES) $< -o $@ 32 33%.o: %.s 34 $(AS) $(AFLAGS) $(INCS) $(DEFINES) $< -o $@ 35 36%.o: %.c 37 $(CC) -c $(CFLAGS) $(INCS) $(DEFINES) $< -o $@ 38 39%.c: %.l 40 $(LEX) -t $(LXFLAGS) $< > $@ 41 42%.tab.c: %.y 43 $(YACC) $(YCFLAGS) $< 44 45%.tab.h: 46 $(YACC) -d $(YCFLAGS) $*.y 47 48all: $(DEPENDS) $(PROG) 49 @$(BUILD) 50 51$(PROG): $(OBJS) 52 $(DO_MAKE) 53 $(CC) $(LDFLAGS) $(CFLAGS) $(OBJS) $(LDPATH) $(LIBS) -o $(PROG) 54 $(POSTLINK) 55 56$(LPROG): $(OBJS) 57 $(AR) $(ARFLAGS) $(LPROG) $(OBJS) 58 $(POSTLINK) 59 60%.tab.c.dep: %.tab.c %.tab.h Makefile $(MAKETEMPL) 61 @if [ -f $@ ]; then \ 62 echo Updating dependencies for $<...; \ 63 else \ 64 echo Making dependencies for $<...; \ 65 fi 66 @rm -f $@ 67 @$(CC) $(CFLAGS) $(INCS) $(DEFINES) -MM $< > $@ 68 69%.c.dep: %.c Makefile $(MAKETEMPL) $(YHEADERS) 70 @if [ -f $@ ]; then \ 71 echo Updating dependencies for $<...; \ 72 else \ 73 echo Making dependencies for $<...; \ 74 fi 75 @rm -f $@ 76 @$(CC) $(CFLAGS) $(INCS) $(DEFINES) -MM $< > $@ 77 78%.cpp.dep: %.cpp Makefile $(MAKETEMPL) $(YHEADERS) 79 @if [ -f $@ ]; then \ 80 echo Updating dependencies for $<...; \ 81 else \ 82 echo Making dependencies for $<...; \ 83 fi 84 @rm -f $@ 85 @$(CC) $(CFLAGS) $(INCS) $(DEFINES) -MM $< > $@ 86 87install: $(PROG) 88 @if [ ! -e $(INSTDIR) ]; then \ 89 install -d -m 755 $(INSTDIR); \ 90 fi 91 install $(INSTFLAGS) $(PERM) $(PROG) $(INSTDIR) 92 93depend: 94 @rm $(DEPENDS) 95 96clean: depend 97 $(DO_CLEAN) 98 @rm -f *.output \#* *~ *.o $(YSRCS) $(YHEADERS) $(LSRCS) $(OBJS) $(PROG) $(PROG).core core *.log 99 100help: 101 @clear 102 @echo How To Use This Makefile 103 @echo 104 @echo 1\) Fill out the appropriate fields in the Makefile 105 @echo 2\) Build your program using: gmake $(PROG) 106 @echo 107 108include $(DEPENDS) 109