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