プログラミングユーティリティ

内部規則

make が使用する標準の内部規則を以下に示します。

make が認識する接尾辞は、以下のとおりです。

.o.c.c‾.y.y‾.l.l‾.s.s‾.sh.sh‾
.h.h‾.f.f‾.C.C‾.Y.Y‾.L.L‾

定義済みマクロを以下に示します。

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= $=$

特別な規則

この節では、接尾辞が 1 つまたは 2 つの特別な make の規則について説明しています。

markfile.o : markfile 
     A=@; echo "static char _sccsid[]=¥042`grep $$A'(#)' ¥ 
     markfile`¥042;" > markfile.c 
     $(CC) -c markfile.c 
     rm -f markfile.c

接尾辞が 1 つの規則

以下に、接尾辞が 1 つの規則を示します。

.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) $< 

接尾辞が 2 つの規則

以下に、接尾辞が 2 つの規則を示します。

.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 $@