1 9 9 m a k e make m a k e RCS 7 m a k e m a k e m a k e m a k e m a k e p r o g r a m. c i n p u t s. c o u t p u t s. c % gcc program.c inputs.c outputs.c i n p u t s. o o u t p u t s. o p r o g r a m. c % gcc program.c inputs.o outputs.o g c c p r o g r a m. c
2 0 0 i n p u t s. c o u t p u t s. c m a k e m a k e m a k e B A A B b u z z. o b u z z. c b u z z. h b u z z. o b u z z. c b u z z. h b u z z. o b u z z. c b u z z. o m a k e f i l e m a k e m a k e m a k e f i l e M a k e f i l e m a k e m a k e m a k e m a k e
2 0 1 m a k e m a k e m a k e O R e i l l y M a n a g i n gp r o j e c t sw i t h m a k e O R e i l l y 1991 m a k e C D G N U M a k e M a n u a l i n f o m a k e s t i m u l a t e m a k e # m a k e f i l e # # # : # s t i m u l a t e : # s t i m u l a t e gcc -o stimulate -O stimulate.c inputs.c outputs.c s t i m u l a t e. d b : # s t i m u l a t e. d b gcc -DDEBUG -g -o stimulate.db stimulate.c inputs.c outputs.c m a k e s t i m u l a t e gcc -o stimulate -O stimulate.c inputs.c outputs.c s t i m u l a t e gcc -DDEBUG -g -o stimulate.db stimulate.c inputs.c outputs.c
2 0 2 D E B U G g d b m a k e m a k e m a k e m a k e c d cd../stimsource gcc stimsource.c c d s t i m s o u r c e. c s t i m s o u r c e m a k e cd../stimsource ; gcc stimsource.c m a k e % m a k etarget t a rg e t m a k e m a k e m a k e % make stimulate
2 0 3 % make stimulate.db % make s t i m u l a t e s t i m u l a t e d b m a k e s t i m u l a t e m a k e m a k e b u z z. o b u z z. c b u z z. c b u z z. o m a k e s t i m u l a t e s t i m u l a t e s t i m u l a t e. c i n p u t s. c o u t p u t s. c m a k e s t i m u l a t e s t i m u l a t e. o i n p u t s. o o u t p u t s. o s t i m u l a t e s t i m u l a t e. c s t i m u l a t e. c s t i m u l a t e s t i m u l a t e. c s t i m u l a t e. o s t i m u l a t e g c c m a k e stimulate: stimulate.o inputs.o outputs.o gcc -o stimulate stimulate.o inputs.o outputs.o s t i m u l a t e s t i m u l a t e. o i n p u t s. o o u t p u t s. o g c c s t i m u l a t e s t i m u l a t e. o i n p u t s. o o u t p u t. o s t i m u l a t e
2 0 4 l d g c c s t i m u l a t e. d b m a k e t a r g e t - n : a l m i es t - o f - d e p e n d e n c i e s t a rg e t - n a m e l i s t o f d e p e n d e n c i e s s t i m u l a t e. o i n p u t s. o o u t p u t s. o s t i m u l a t e. o s t i m u l a t e. c s t i m u l a t e i n p u t s. o o u t p u t s. o m a k e 2 stimulate: stimulate.o inputs.o outputs.o gcc -o stimulate stimulate.o inputs.o outputs.o stimulate.o: stimulate.c gcc -c -O stimulate.c inputs.o: inputs.c headerfile.c gcc -c -O inputs.c outputs.o: outputs.c gcc -c -O outputs.c i n p u t s. o i n p u t. o h e a d e r f i l e. c # i n c l u d e i n p u t s. c h e a d e r f i l e. c i n p u t s. c i n p u t s. o m a k e m a k e m a k e m a k e 1
2 0 5 2 3 4 m a k e o u t p u t s. c m a k e s t i m u l a t e m a k e 1 s t i m u l a t e. o i n p u t s. o o u t p u t s. o 2 3 o u t p u t s. o o u t p u t s. c 4 s t i m u l a t e. o i n p u t s. o o u t p u t s. o s t i m u l a t e 5 s t i m u l a t e o u t p u t s. o 6. s t i m u l a t e m a k e t a s k t a s k s t i m u l a t e s t i m u l a t e. d b m a k e m a k e m a k e m a k e D D E B U G g s t i m u l a t e. d b D E B U G g d b stimulate.db: stimulate.do inputs.do outputs.do gcc -o stimulate.db stimulate.do inputs.do outputs.do stimulate.do: stimulate.c gcc -o stimulate.do -c -DDEBUG -g stimulate.c inputs.do: inputs.c headerfile.c gcc -o inputs.do -c -DDEBUG -g inputs.c outputs.do: outputs.c gcc -o outputs.do -c -DDEBUG -g outputs.c
2 0 6 s t i m u l a t e. o i n p u t s. o o u t p u t s. o m a k e c l e a n m a k e c l e a n m a k e m a k e c l e a n m a k e c l e a n m a k e clean : rm *.o *.do *~ stimulate stimulate.db i n s t a l l m a k e m a k e make m a k e m a k e m a k e m a k e m a k e $ @ $ *
2 0 7 m a k e $ @ $ * stimulate: stimulate.o inputs.o outputs.o gcc -o $@ $*.o inputs.o outputs.o stimulate.db: stimulate.do inputs.do outputs.do gcc -o $@ $*.do stimulate.do inputs.o outputs.o inputs.o: inputs.c inputdefs.h gcc -c -O $*.c inputs.do:... etc.... s t i m u l a t e $ @ $ * s t i m u l a t e i n p u t s. o $ * s t r i n g $ @ i n p u t s. o m a k e macro-name = macro-body m a k e m a k e $ m a c r o n a m e m a c r o b o d y D E P E N D S D B D E P E N D S make DEPENDS = inputs.o outputs.o stimulate.o DBDEPENDS = inputs.do outputs.do stimulate.do stimulate: $(DEPENDS) gcc -o $@ $(DEPENDS) stimulate.db: $(DBDEPENDS) gcc -o $@ $(DBDEPENDS) CFLAGS = -DDEBUG -g gcc -c $(CFLAGS) inputs.c m a k e i n p u t s. c D D E B U G g $ C F L A G S $ C F L A G S
2 0 8 m a k e V PAT H V PAT H V P A T H dir1:dir2: =... :dirn V PAT H m a k e d i r 1 d i r 2 m a k e m a k e V PAT H m a k e m a k e m a k e C M S D O S G N U m a k e
2 0 9. S U F F I X E S. S U F F I X E S #. S U F F I X E S : #.c,.o,.do #.SUFFIXES:.c.o.do m a k e. c. o. d o m a k e c m a k e o d o.c.o:; gcc -c -o $@ -O $*.c m a k e. o m a k e g c c t a rg e t. c t a rg e t. o D m a k e. o m a k e $ $. c. o. c.c.o:; gcc -c -o $@ -O $<.c.do:; gcc -c -o $@ $(CFLAGS) $< C F L A G S m a k e f i l e #. S U F F I X E S :
2 1 0 #.c,.o, #.do.suffixes:.c.o.do DEBUGFLAGS = -DDEBUG -g PRODUCTFLAGS = -w -O PRODUCTOBJS = program.o other.o DEBUGOBJS = program.do other.do EXECNAME = product # p r o d u c t i o n.c.o:; gcc -c -o $@(PRODUCTFLAGS) $< #.do (.o ).c.do:; gcc -c -o $@(DEBUGFLAGS) $< # production: $(PRODUCTOBJS) gcc -o $(EXECNAME) $(PRODUCTOBJS) debug: $(DEBUGOBJS) gcc -o $(EXECNAME) $(DEBUGOBJS) # program.o: program.c header.h other.o: other.c # program.do: program.c header.h other.do: other.c c l e a n : rm *.o *.do *~ rm product m a k e m a k e p r o g r a m. o p r o g r a m. c. o gcc -c program.o -w -O program.c o t h e r. o gcc -c other.o -w -O other.c m a k e o t h e r. d o m a k e p r o g r a m. d o D E B U G m a k e p r o d u c t i o n m a k e d e b u g p r o d u c t i o n m a k e c l e a n
2 1 1. o. d o $ @ G N U m a k e m a k e %.o : %.c gcc $(CFLAGS) -c $<. c. o %_xdr.c %_clnt.c %_svc.c %.h : %.x rpcgen $< m a k e S u n O N C R P C p r o g. x m a k e r p c g e n p r o g _ x d r. c p r o g _ c l n t. c p r o g _ s v c. c p r o g. h m a k e c m a k e m a k e program.o: program.c m a k e m a k e cc -c program.c -o program.o c c G N U C g c c C D g c c G N U m a k e c c $ C C m a k e g c c CC = gcc m a k e C F O RT R A N l e x y a c c
2 1 2 m a k e m a k e % make program.o m a k e 0 m a k e cc -c program.c -o program.o m a k e m a k e m a k e m a k e f i l e m a k e % m a k et a r g e t - n a m e t a rg e t n a m e t a rg e t n a m e t a rg e t n a m e m a k e m a k e m a k e m a k e m a k e m a k e m a k e
2 1 3 m a k e G N U m a k e M a k e M a n u a l M a n a g i n gp r o j e c t sw i t hm a k e O R e i l l y 1991 m a k e m a k e f i l e M a k e f i l e m a k e m a k e m a k e o t h e r m a k e. m k % make -f othermake.mk m a k e m a k e m a k e m a k e 0 i m a k e. I G N O R E m a k e 0 k i m a k e 0 0 m a k e m a k e m a k e S I L E N T
2 1 4 m a k e t o u c h m a k e G N U m a k e m a k e j m a k e j m a k e m a k e R C S R C S R C S R C S G N U m a k e R C S R C S
2 1 5 p r o g r a m. c R C S p r o g r a m. c, v p r o g r a m. o % make program.o co RCS/program.c,v program.c RCS/program.c,v --> program.c,v revision 1.1 d o n e cc -c program.c -o program.o rm program.c m a k e p r o g r a m. c G N U m a k e R C S v R C S v m a k e R C S 8 R C S G N U m a k e m a k e t a rg e t m a k e t a rg e t t a rg e t m a k e
2 1 6 m a k e # m a k e k 0 m a k e c o m m a n d m a k e m a k e m a k e G N U m a k e f m a k e m a k e C F L A G S $ C F L A G S
2 1 7 m a k e G N U M a k e M a n u a l m a k e M a n a g i n g Projects with make O R e i l l y 1991 m a k e m a k e m a k e m a k e m a k e m a k e m a k e