The standard set of internal rules used by make are reproduced below.
Suffixes recognized by make are:
.o | .c | .c~ | .y | .y~ | .l | .l~ | .s | .s~ | .sh | .sh~ |
.h | .h~ | .f | .f~ | .C | .C~ | .Y | .Y~ | .L | .L~ |
The following are predefined macros:
AR=ar ARFLAGS=-rv AS=as ASFLAGS= BUILD=build CC=cc CFLAGS= -0 C++C=CC C++FLAGS= -0 F77=f77 FFLAGS= -0 GET=get GFLAGS= LEX=lex LFLAGS= LD=ld LDFLAGS= MAKE=make MAKEFLAGS= YACC=yacc YFLAGS= $=$ |
This section covers special make rules with either single or double suffixes.
markfile.o : markfile A=@; echo "static char _sccsid[]=\042`grep $$A'(#)' \ markfile`\042;" > markfile.c $(CC) -c markfile.c rm -f markfile.c
The following are single-suffix rules:
.c: $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
.c~: $(GET) $(GFLAGS) $< $(CC) $(CFLAGS) $(LDFLAGS) -o $* $*.c rm -f $*.c
.s: $(AS) $(AFLAGS) -o $@ $<
.s~: $(GET) $(GFLAGS) $< $(AS) $(AFLAGS) -o $@ $*.s rm -f $*.s
.sh: cp $< $@; chmod 0777 $@
.sh~: $(GET) $(GFLAGS) $< cp $*.sh $*; chmod 0777 $@ rm -f $*.sh
.f: $(F77) $(FFLAGS) $(LDFLAGS) -o $@ $<
.f~: $(GET) $(GFLAGS) $< $(F77) $(FFLAGS) -o $@ $(LDFLAGS) $*.f rm -f $*.f
.C~: $(GET) $(GFLAGS) $< $(C++C) $(C++FLAGS) -o $@ $(LDFLAGS) $*.C rm -f $*.C
.C: $(C++C) $(C++FLAGS) -o $@ $(LDFLAGS) $<
The following are double-suffix rules:
.c~.c | .y~.y | .l~.l | .s~.s | .sh~.sh |
.h~.h | .f~.f | .C~.C | .Y~.Y | .L~.L |
$(GET) $(GFLAGS) $<
.c.a: $(CC) -c $(CFLAGS) $< $(AR) $(ARFLAGS) $@ $*.o rm -f $*.o
c.a~: $(GET) $(GFLAGS) $< $(CC) -c $(CFLAGS) $*.c $(AR) $(ARFLAGS) $@ $*.o rm -f $*.[co]
.c.o: $(CC) $(CFLAGS) -c $<
.c~.o: $(GET) $(GFLAGS) $< $(CC) $(CFLAGS) -c $*.c rm -f $*.c
.y.c:
$(YACC) $(YFLAGS) $< mv y.tab.c $@
.y~.c:
$(GET) $(GFLAGS) $< $(YACC) $(YFLAGS) $*.y mv y.tab.c $*.c rm -f $*.y
.y.o: $(YACC) $(YFLAGS) $< $(CC) $(CFLAGS) -c y.tab.c rm -f y.tab.c mv y.tab.o $@
.y~.o: $(GET) $(GFLAGS) $< $(YACC) $(YFLAGS) $*.y $(CC) $(CFLAGS) -c y.tab.c rm -f y.tab.c $*.y mv y.tab.o $*.o
.l.c: $(LEX) $(LFLAGS) $< mv lex.yy.c $@
.l~.c: $(GET) $(GFLAGS) $< $(LEX) $(LFLAGS) $*.l mv lex.yy.c $@ rm -f $*.l
.l.o: $(LEX) $(LFLAGS) $< $(CC) $(CFLAGS) -c lex.yy.c rm -f lex.yy.c mv lex.yy.o $@
.l~.o: $(GET) $(GFLAGS) $< $(LEX) $(LFLAGS) $*.l $(CC) $(CFLAGS) -c lex.yy.c rm -f lex.yy.c $*.l mv lex.yy.o $@
.s.a: $(AS) $(ASFLAGS) -o $*.o $*.s $(AR) $(ARFLAGS) $@ $*.o
.s~.a: $(GET) $(GFLAGS) $< $(AS) $(ASFLAGS) -o $*.o $*.s $(AR) $(ARFLAGS) $@ $*.o rm -f $*.[so]
.s.o: $(AS) $(ASFLAGS) -o $@ $<
.s~.o: $(GET) $(GFLAGS) $< $(AS) $(ASFLAGS) -o $*.o $*.s rm -f $*.s
.f.a: $(F77) $(FFLAGS) -c $*.f $(AR) $(ARFLAGS) $@ $*.o rm -f $*.o
.f~.a: $(GET) $(GFLAGS) $< $(F77) $(FFLAGS) -c $*.f $(AR) $(ARFLAGS) $@ $*.o rm -f $*.[fo]
.f.o: $(F77) $(FFLAGS) -c $*.f
.f~.o: $(GET) $(GFLAGS) $< $(F77) $(FFLAGS) -c $*.f rm -f $*.f
.C.a: $(C++C) $(C++FLAGS) -c $< $(AR) $(ARFLAGS) $@ $*.o rm -f $*.o
.C~.a: $(GET) $(GFLAGS) $< $(C++C) $(C++FLAGS) -c $*.C $(AR) $(ARFLAGS) $@ $*.o rm -f $*.[Co]
.C.o: $(C++C) $(C++FLAGS) -c $<
.C~.o: $(GET) $(GFLAGS) $< $(C++C) $(C++FLAGS) -c $*.C rm -f $*.C
.Y.C: $(YACC) $(YFLAGS) $< mv y.tab.c $@
.Y~.C: $(GET) $(GFLAGS) $< $(YACC) $(YFLAGS) $*.Y mv y.tab.c $*.C rm -f $*.Y
.Y.o $(YACC) $(YFLAGS) $< $(C++C) $(C++FLAGS) -c y.tab.c rm -f y.tab.c mv y.tab.o $@
.Y~.o: $(GET) $(GFLAGS) $< $(YACC) $(YFLAGS) $*.Y $(C++C) $(C++FLAGS) -c y.tab.c rm -f y.tab.c $*.Y mv y.tab.o $*.o
.L.C: $(LEX) $(LFLAGS) $< mv lex.yy.c $@
.L~.C: $(GET) $(GFLAGS) $< $(LEX) $(LFLAGS) $*.L mv lex.yy.c $@ rm -f $*.L
.L.o: $(LEX) $(LFLAGS) $< $(C++C) $(C++FLAGS) -c lex.yy.c rm -f lex.yy.c mv lex.yy.o $@
.L~.o: $(GET) $(GFLAGS) $< $(LEX) $(LFLAGS) $*.L $(C++C) $(C++FLAGS) -c lex.yy.c rm -f lex.yy.c $*.L mv lex.yy.o $@