�ޤ���������Ǥ�
����: ���Υڡ��������Ƥˤϡ������餯¿���δְ㤤������ޤ���
�����Ƥ���ΤǻĤ��Ƥ����ޤ��������Ѥˤ����դ��Ƥ���������(2008ǯ3�����)
�����ǤϤ���� make �λȤ��� �� Makefile �ν����ˤĤ��� �������Ƥ��ޤ������Ĥ� make �μ���ˤϤ����������ꡢ�����Ǥ� GNU make (gmake �Ȥ������ޥ��̾�Τ��Ȥ⤢��) �� �оݤˤ��Ƥ��ޤ� (BSD �� pmake �Ǥ����Ū����ʬ��Ʊ���Ǥ����� �ޥ�������ʤɤϰ㤦�Ȥ����⤢��Τ����դ��Ƥ�������)�� �狼��ˤ����ս�Ȥ����ޤ����äƤ�ս꤬������ϥ�뤯��������
�㤨�ФĤ��Τ褦�� C �Υ������ե����뤬����Ȥ��ơ�����餫�� �ǽ�Ū�˼¹Բ�ǽ�ե����� a.out ���������� Makefile ���
header.h �� sub1.c, sub2.c �ˤ��줾�� #include ����Ƥ����ΤȤ��� :
sub1.c :
/* sub1.c */ #include "header.h" ..
sub2.c :
/* sub2.c */ #include "header.h" ..
a.out �� sub1.o �� sub2.o (���줾�� sub1.c, sub2.c ��ѥ��뤷�� ���֥������ȥե�����) �����ƤǤ���¹Բ�ǽ�ե�����Ǥ��롣
�ޤ� a.out ������ sub1.c �� sub2.c �� ��¸���Ƥ��롣�������äơ�sub1.c, sub2.c �Τɤ��餫�� �������줿���ˤϡ�a.out �� �ƥ���ѥ��� (���ξ��ϥ��) ����ɬ�פ����롣
����� sub1.c, sub2.c ��ξ���إå��ե����� header.h �˰�¸���Ƥ��� (�ʤ��ʤ顢ξ���Ȥ� header.h �� #include ���Ƥ��뤫��)�� �������äơ�header.h ���������줿���ˤϡ�sub1.c, sub2.c �Ȥ�˺ƥ���ѥ��뤹��ɬ�פ����롣 �����������αƶ�������� a.out ����٥���ʤ���Фʤ�ʤ���
�Ǥϰʾ�Τ褦�ʾ����ǡ���Ȥ�ڸ����뤿��� Makefile ���� �ɤ��ʤ��������?
# Makefile 1 (��#�פϹ����ޤǤΥ�����) a.out: sub1.o sub2.o # �������å� a.out �ΰ�¸�ե������ sub1.o, sub2.o cc -o a.out sub1.o sub2.o # a.out ���������ޥ�� sub1.o: sub1.c # sub1.o �ΰ�¸�ե������ sub1.c cc -c sub1.c # sub1.o ���������ޥ�� sub2.o: sub2.c # sub2.o �ΰ�¸�ե������ sub2.c cc -c sub2.c # sub2.o ���������ޥ�� # header.h �ϥ���ѥ������ include �����Τǡ��ºݤˤϲ��⤷�ʤ��Ƥ褤 sub1.c: header.h # sub1.c �ΰ�¸�ե������ header.h sub2.c: header.h # sub2.c �ΰ�¸�ե������ header.h
�����ǡ�header.h �� sub1.c, sub2.c ��� #include ����Ƥ���Τǡ� �Ǹ�� sub1.c �� sub2.c �Τ���ε�§�ϡ� �ºݤˤϲ���Ԥ�ʤ��� �����ε�§�� header.h ���������Ȥ��Τ���ˤ��롣 �������Ƥ����ȡ�make �� header.h �ι����� �����å����뤳�Ȥ� sub1.c �� sub2.c �� �������줿�Ȥߤʤ���sub1.c �� sub2.c �� ��ưŪ�˥���ѥ��뤷�ʤ����Ƥ���롣
���ơ� ��� Makefile �ˤϻ����褦����ʬ�������Ĥ⤢�롣 ���Τ���ե����뤬�����Ƥ���ȽΤ����Ѥ� (make �� �������ե�����ο��������Ȥ��� ��٥�ΤȤ��˿��θ��̤�ȯ������)�� �����ǡ֥��ե��å����롼��פ�Ȥäơ������û�̤��Ƥߤ褦��
# Makefile 2 a.out: sub1.o sub2.o cc -o a.out sub1.o sub2.o # ���ե��å����롼�� (.c �� .o) .c.o: cc -c $< sub1.o: header.h # ����: .c �ǤϤʤ� .o ����¸���Ƥ��� sub2.o: header.h
�����ǻȤ��Ƥ��륵�ե��å����롼��ϡ����Τ褦�ʤ��Ȥ��̣���Ƥ��롣
�֥��ե��å��� .c �Υե�������Ф��Ƥϡ�����ˤ�ä� make �� ���ʤ�Ȥ�.o�פȤ����ե����뤬ɬ�פǡ����� ���ʤ�Ȥ�.c�פȤ����ե����뤬����Ȥ��ϡ� ���Ĥ⤳���������ޥ�ɤ�Ȥ��� �����Ǥ������Ȱ�ä� sub1.o, sub2.o �� header.h �˰�¸���Ƥ���Ƚ�Ƥ��뤳�Ȥ����ա� ����� sub1.c �� sub2.c �Τޤޤˤ��Ƥ����ȡ� make �Ϥ��ޤ�ư���Ƥ���ʤ���cc -c ���Υե����� �Ȥ����������ޥ�ɤ�Ȥä� ���ե��å��� .o �Υե���������������
������ǡ���$<�פϥޥ����ΰ��Ǥ��롣 �ޥ����ȤϤ������ѿ��Τ褦�ʤ�Τǡ�����ޤ��Ȥ��Ⱦ�� Makefile �Ϥ����û�̤Ǥ��롣
# Makefile 3 # �ޥ�������� CC = cc OBJS = sub1.o sub2.o # ������§�� a.out: $(OBJS) # $(OBJS) �� "sub1.o sub2.o" $(CC) -o $@ $(OBJS) # $@ �� "a.out", $(CC) �� "cc" .c.o: $(CC) -c $< sub1.o: header.h sub2.o: header.h
�ޥ�������ϤդĤ� Makefile ����Ƭ�˽� (�ܺ٤ϡ��ޥ�������ν����ι��)�� ������Ǥϡ���¸�ե�����ȥ���ѥ���Υ��ޥ�ɤ�ޥ����ˤ��뤳�Ȥǡ� �ѹ����٤��ս�ʤ����Ƥ��롣make ��¹Ԥ���Ȥ��ϥ���ѥ���� ����ѥ��饪�ץ����������Ѥ��Ƥߤ뤳�Ȥ�¿���Τǡ� ���Τ褦�ˤ��Ƥ����������Ǥ��롣�������ޥ�ɤ���ǻȤ��Ƥ��� ��$@�פȤ����ޥ����ϡ��������å�̾ (���ξ��� a.out) �� Ÿ�����졢��$<�פȤ����ޥ����ϡ������Ǥ�Ҥ٤��褦�� ���ե��å����롼����ǥ���ѥ��뤹�٤��ե�����̾�ΤҤȤ� (���Ȥ��С����ե��å����롼�뤬 sub1.c �� sub1.o ��Ŭ�Ѥ���Ƥ����� ���ξ��� sub1.c) ��Ÿ������롣 ���Τ褦�ʥޥ�������˻Ȥ��Τ����������� Makefile ����ĤǤ��롣
make ��
�Ȥ��������פ��뤳�Ȥǡ�Makefile ���ɤ߹��ߥ������åȤ������Ϥ��롣 ���Τ褦�˲�����ꤻ���� make ��¹Ԥ���ȡ�make �Ϥ��κǽ���ɸ�Ȥ��� Makefile �ΰ��ֺǽ�˽�Ƥ��륿�����å����������褦�Ȥ��롣 �㤨����� Makefile �Ǥϡ�make �� a.out �Ȥ��� �������åȤ��������褦�Ȥ��롣 �������륿�����åȤ���ꤷ�� make ��¹Ԥ���ˤϡ�% make
�Τ褦�˼¹Ԥ���Ф褤�����ξ�硢make �� Makefile �ΰ��ֺǽ�˽Ƥ��� �������åȤΤ����ˡ���sub1.o�פȤ����������åȤ���������ˤȤɤ�롣% make sub1.o
make ���ǥե���Ȥ��ɤ߹���ե������ ��Makefile�� �Ȥ���̾���Ǥʤ���� �ʤ�ʤ���������������ʳ��Υե������ Makefile �Ȥ������Ѥ��������ϡ�
�Τ褦�˻��ꤹ�롣����ǡ�make �� Makefile.unix �Ȥ����ե������ Makefile ������˻Ȥ���% make -f Makefile.unix
�ޤ���make �ϥޥ�������������������Ǥ�Ǥ��롣
�Ȥ���С�make �μ¹Ի��ˤϤ��餫���� CC �ޥ������������롣 �����ͤ� Makefile ����������Ƥ���ޥ������ͤ���ͥ�褷�ƻȤ����� �������뤳�Ȥǡ�Makefile ������뤳�Ȥʤ���ڤˤ��������� �����ǥե�������������뤳�Ȥ��Ǥ��롣% make CC=gcc
Make �μ¹ԥ��ץ��������̥����뤫����ꤹ�뤬�� �Ķ��ѿ� MFLAGS �Ǥ����Ǥ��롣�����¿�� make (make ��������� ���������ҤȤʤä� make ��¹Ԥ��뤳�ȡ�¿�� make ����) �ǡ��� make ���¹ԥ��ץ����λ� make �˷Ѿ����뤿��˻Ȥ���
Makefile �ϴ����Ȥ��ơ��Ĥ��Τ褦�ʹ�¤�ˤ����ޤ���ʬ�����Ƥ��롣
������ե��������Ƭ����������ȽƤ����Ф褤�� ���ߥ����� ; �ʤɤ����̤ʹ����ΰ���ɬ�פʤ� (������ �������ޥ�ɤ�������Ƭ�˥���ʸ����Ȥ�ɬ�פ������Τ����ա� �ܤ����� ������§����� ��)�� �����Ȥϡ�#�פ���ȤǻϤޤꡢ �ʲ������ޤ��������ȤȤߤʤ���롣
��Ƭ���顢
�ޥ���̾ = ���Τ褦�˽��ͤ���ǡ�������̤Υޥ����Ȥ��Ƥ�褤��
��:
����������ʬ���ȤȤ��ƤϤ����ʤ� (��: OBJS = $(OBJS) sub.c �ϥ���)���ޤ����ʲ��ι�ˤ� �Ƥ���褦�ˡ��ޥ������ͤϤ�������Ƿ��ꤵ���Ȥϸ¤餺�� �����������Ķ��ѿ������Ƥˤ�äƤ�ƶ�������롣CC = gcc OBJ1 = sub1.c OBJS = $(OBJ1) sub2.c
�ޥ��������äƤ����ͤ�Ÿ�����뤤���Ф����Ū�ʤ������ $(CC) �Τ褦�ˤ�����ˡ�Ǥ��롣��������С� ������ʬ���ޥ��� CC ��������줿ʸ���� (�����Ǥ� gcc)��Ÿ������롣make �Ϥ����Ĥ��Υޥ��� Ÿ����ˡ�ݡ��Ȥ��Ƥ��� :
��:
a.out: sub1.o cc -o $@ sub1.o
�����ǡ�
$@ �� a.out
��Ÿ������롣
��:
.c.o: cc -c $<
�����ǡ�make �� sub1.c ���� sub1.o ���������뤿���
�����������ޥ�ɤ�¹Ԥ���ʤ�С�
$< �� sub1.c
��Ÿ������롣
��:
paper.ps: paper.dvi dvips $*
�����ǡ�
$* �� paper
��Ÿ������롣
��:
a.out: sub1.c sub2.c echo "$? are modified."
�����ǡ��⤷ sub1.c ������ a.out ���⿷�������
$? �� sub1.c
��Ÿ������롣
���ޤ�Ȥ��ʤ������ʲ��Τ褦�ʥޥ����⤢�롣
VAR = CC CC = gcc �����ǡ� $($(VAR)) �� $(CC) �� gcc
OBJS = sub1.o sub2.o sub3.o �����ǡ� $(OBJS:.o=.c) �� sub1.c sub2.c sub3.c
NAMES = aaa bbb ccc �����ǡ� $(NAMES/*/sub_&.c) �� sub_aaa.c sub_bbb.c sub_ccc.c
NAMES = aaa.c bbb.c ccc.c �����ǡ� $(NAMES/^/sub_) �� sub_aaa.c sub_bbb.c sub_ccc.c
NAMES = sub_aaa sub_bbb sub_ccc �����ǡ� $(NAMES/$/.c) �� sub_aaa.c sub_bbb.c sub_ccc.c
�ҤȤĤ�������§�Ϥ���� 2�Ĥ���ʬ��ʬ����롣������
make �ϡ���¸�ط�����Ԥ��������ޥ�ɤ���Ԥ� ��Ƭ�˥��֤����뤫�ʤ����Ƕ��̤��Ƥ��롣�������äơ�
�� :
a.out: sub1.o sub2.o # ��¸�ط� cc -o a.out sub1.o sub2.o # �������ޥ��1 strip a.out # �������ޥ��2
��������make �Ǥ� �������\�פǥ��������פ��뤳�Ȥ��Ǥ���Τǡ� ����Ū�ˤ� 1�Ԥΰ�¸�ط��Ǥ⸫������ʣ���ԤȤ��ư������Ȥ��Ǥ��� (������������ޥ�ɤǤ�Ʊ���Ǥ���)��
�����������פ�����:
a.out: sub1.o \ sub2.o cc -o a.out sub1.o \ sub2.o strip a.out
���ξ��ⵡǽ�Ͼ�Ȥޤä���Ʊ���Ǥ��롣
�� (�ɤ����ɬ����Ƭ��������) :
�� 1: (�������å� a.out �� sub1.o, sub2.o �Ȥ���2�ĤΥե������ ��¸���Ƥ��뤳�Ȥ�ɽ��)
a.out: sub1.o sub2.o cc -o a.out sub1.o sub2.o # �������ޥ��
�� 2: (�٤Ĥ˰�¸�ե�����Ϥʤ��Ƥ�褤)
logfile: touch logfile # logfile �Ȥ������Υե���������
�ʤ����褯�Ȥ��� make �Υ��ĤȤ��ơ��ºݤˤ���������ʤ� �������å�̾��Ĥ��ä��Хå����������롣 Makefile ���� �ȡ�
�����ե��å���2 �ΤĤ����ե����뤫�顢���Ȥ�ɽ�����Ĥޤꡢ
�����ե��å���1 �ΤĤ����ե�����������Ǥ����
�δط��Ǥ��롣������դ˽Ƥ��ޤ��ߥ������ա������� �� ������ .���ե��å���1.���ե��å���2:
����1: ���ե��å����롼��˴��Ԥ������ʤ����ȡ� ���ե��å����롼��ϡ������ޤ� ���������ޥ�ɤ���ά���줿�Ȥ��ˤ��Υ롼�����Ѥ���� �Ȥ�����ΤǤ��ꡢ��¸�ط������ѤˤϤʤ�ʤ��� �Ĥޤꡢ.c.o �Υ��ե��å����롼��������Ȥ��äơ�
��.o �ΤĤ����ե������ɬ����������������Ȥˤ��ʤ�ʤ��� ���ե��å����롼�뤬���ꤹ��Τ� �����ޤǾ�ά�����������ޥ�ɤ����ʤΤ���
.c �ΤĤ����ե�����˰�¸���Ƥ����
����ϡ�make �� sub1.c �� sub1.o �ΰ�¸�ط����Τ�ʤ�������� �ʲ��Τ褦�˽Ȥ��ޤ�ư�� :a.out: sub1.o cc -o $@ sub1.o .c.o: cc -c $< sub1.c: header.h
���뤤�ϡ��ʲ��Τ褦�ˤ��� :a.out: sub1.o cc -o $@ sub1.o .c.o: cc -c $< sub1.o: sub1.c sub1.c: sub1.h
a.out: sub1.o cc -o $@ sub1.o .c.o: cc -c $< sub1.o: sub1.h
����2: ���ե��å����롼��� .c , .o, .h, .a �ʳ��Υ��ե��å�����Ȥ����ϡ�make ������� ���ե��å����Ǥ����ǧ���Ǥ���褦�ˡ� ���餫���� Makefile ��Ƭ�Ǽ��Τ褦��������Ƥ���ɬ�פ����� :
.SUFFIXES: .tex .dvi .ps .java .class # �������ɲä��륵�ե��å��� .tex.dvi: jlatex $< # tex ���������� dvi �ե���������� .dvi.ps: dvips $< # dvi �ե����뤫�� PostScript �ե���������� .java.class: javac $< # java ���������� class �ե����������
�������ޥ�ɤϤ����դĤ��˥�����Ǽ¹Ԥ��륳�ޥ�ɤ� �Ф褤����ɬ����Ƭ�˥���ʸ������������ȡ�
�� :
�� :
sub1.o: sub1.c # ���ιԤϰ�¸�ط� cc -c prog.c # ���ιԤ��������ޥ�� �������� (���ζ����� TAB �������ƺ�뤳�ȡ����ڡ������¤٤Ƥϥ���)
make �Ϥ��Υ������åȤ��������ޥ�ɤ�夫���˰�Ԥ��ļ¹Ԥ��롣 ����Ū�ˤ��������ޥ�ɰ�Ԥ��Ȥ� make �Ϥޤ��������Ƥ�ɸ����Ϥ�ɽ������ sh (Bourne Shell) ��ư�������ιԤ����Ƥ�¹Ԥ����롣 ���ΤȤ���Makefile�� ��������줿�ޥ����ϴĶ��ѿ����ͤȤ��� export ����롣�����ȥǥ��쥯�ȥ�ϸ��� make ��¹Ԥ��Ƥ��� �ǥ��쥯�ȥ�ˤʤ롣
�������ޥ�ɤ����顼��ȯ������� make �Ϥ���ʹߤ���������ߤ��뤬�� ���Τ褦�ʻ��֤��ɻߤ��뤿��ˤ� make �� -k ���ץ�����Ĥ��뤫�� �ʲ��Τ褦�ʽ�Ȥ��Ф褤 :
����¾�ν� :
�� :
clean: -rm a.out *.o # ���Ԥ��Ƥ� make �����Ǥ��ʤ� �������� (���ζ����� TAB �������ƺ�뤳�ȡ����ڡ������¤٤Ƥϥ���)
�� :
clean: @rm a.out *.o # ���Υ��ޥ�ɤ�ɽ�������˼¹� �������� (���ζ����� TAB �������ƺ�뤳�ȡ����ڡ������¤٤Ƥϥ���)
�������ޥ�ɤ�ݤ������� :
������� :
a.out: cd dist # sh �� 2��ư����� cc -o $@ $(OBJS) $(LIBS)
����ϡ��ǽ�� cd �ȼ��� cc �Ϥ��줾���̤Υ�����Ǽ¹Ԥ���Ƥ��� ����Ǥ��롣�������äƥ����ȥǥ��쥯�ȥ�Ϥޤ�������äƤ��ޤ��� ���Τ褦�� cd �� cc ��ҤȤĤΥ������ư�����Ф��ޤ����� :
���ޤ������� :
a.out: cd dist; cc -o $@ $(OBJS) $(LIBS)
�ʤ����������ޥ�ɤβ��Ԥ� \ �ǥ��������פǤ��뤿�ᡢ ��������ʣ���Ԥ��������ޥ�ɤ�Τ�ͭ���Ǥ��� :
ʣ���Ԥ˸����뤬���ޤ������� :
a.out: cd dist; \ # sh �� 1�������ư����� cc -o $@ $(OBJS) $(LIBS)
���� Makefile ��ǡ�¾�Υե���������Ƥ�����ߤ����Ȥ��� include ���ޥ�ɤ�Ȥ���
�ǡ����� include ����������˥ե����뤬�Ȥ���ޤ�롣 C �Υץ�ץ����å��ˤ����� #include �ʤɤȤޤä���Ʊ����include �ե�����̾
�� :
include subdir/Makefile.macro
Makefile �Τʤ��ˤϡ�������Ǥ����¾�� make �� �¹Ԥ���褦�ˤʤäƤ����Τ����롣�����Ϥ���˥������ĥ�� ���֥ǥ��쥯�ȥ���� Makefile ��¹Ԥ����Τ�¿��������ˤ�ä� �ץ������������ϲ��� make ��ʬ���ƹԤ��롣 ���Υ��åȤȤ��Ƥϡ����֥ǥ��쥯�ȥ���Υե�����ϥ��֥ǥ��쥯�ȥ�� Makefile �ˤ�ä�ʬ�������졢Makefile �θ��̤������ä��ꤹ�뤳�Ȥ� �������롣����������Ϥ����ޤǤ�����ȥ��֥ǥ��쥯�ȥꤴ�Ȥ� �狼��䤹�� Makefile ����Ȥ����äǡ��������ؤ����� ��ʬ���Ȥ�ޤ� make �ǸƤӽФ�����ʤɡ������ؤ��ɤߤˤ�����Τ� �ʤäƤ��ޤ����Ȥ⤢�롣
# Makefile for gserver # �ޥ������ CC = cc CFLAGS = -O LDFLAGS = INCLUDES = -I/usr/local/include -I../libmisc -I. LIBS = -L../libmisc -lmisc -lX11 -lGL -lGLU -lm TARGET = gserver2 OBJS = main.o command.o x11window.o resident.o shape.o \ matrix.o object.o stream.o # ������§ all: $(TARGET) test: $(TARGET) ./$(TARGET) -test $(TARGET): $(OBJS) $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) clean: -rm -f $(TARGET) $(OBJS) .nfs* *~ \#* core .c.o: $(CC) $(CFLAGS) $(INCLUDES) -c $< gserver.h: object.h matrix.h gtypes.h command.o: gserver.h main.o: gserver.h matrix.o: matrix.h object.o: object.h resident.o: gserver.h shape.o: gserver.h stream.o: gserver.h x11window.o: gserver.h
# Makefile for java applet hoge .SUFFIXES: .eucjava .java .class TARGET = Hoge all: $(TARGET).class java $(TARGET) run: $(TARGET).class appletviewer $(TARGET).html clean: -rm *.class .eucjava.java: native2ascii -encoding EUCJIS $*.eucjava $*.java .java.class: javac -deprecation $<
# Makefile for thesis TARGET = final FIGS = eps/agent.eps \ eps/broadcast.eps \ eps/jikken.eps \ eps/object1.eps \ eps/planning.eps \ eps/screen.eps \ eps/system.eps LPR = lpr -P$(PRINTER) XDVI = xdvi DVIPS = dvips TEX = jlatex .SUFFIXES: .ps .dvi .tex .eps all: $(TARGET).dvi $(XDVI) $(TARGET).dvi force: clean all print: $(TARGET).ps $(LPR) $(TARGET).ps clean: -rm -f $(TARGET).* .tex.dvi: -rm -f *.aux *.toc *.lot *.lof $(TEX) $< .dvi.ps: $(DVIPS) $< $(TARGET).ps: $(TARGET).dvi $(TARGET).dvi: $(TARGET).tex $(FIGS)
����ʸ��Ǥ� make �Τդ�ޤ�����������Τ� �ʲ��Τ褦���Ѹ��ȤäƤ��ޤ���
Makefile �ˤ������¸�ط����� :
sub1.o: sub1.c �� ��¸�ط�: ��sub1.o �� sub1.c �˰�¸���Ƥ���� cc -c sub1.c �� �������ޥ��: sub1.c ���� sub1.o ����������
�ܤ����� ��¸�ط��ν������ȡ�
Makefile �ˤ����륿�����åȤ��� :
Makefile �ˤ������¸�ե�������� :
Makefile �ˤ������������ޥ�ɤ��� :
�ܤ����� ��¸�ط��ν������ȡ�
Makefile �ˤ����륵�ե��å����롼����� :
sub1.o: sub1.c
^^^^^^
�������å�
sub1.o: sub1.c
^^^^^^
��¸�ե�����
sub1.o: sub1.c �� ��¸�ط�: ��sub1.o �� sub1.c �˰�¸���Ƥ����
cc -c sub1.c �� �������ޥ��: sub1.c ���� sub1.o ����������
.c.o: �� �֡�.c�פ���֡�.o�פ���������Ȥ��ˤϡ�
$(CC) -c $< ���ĤǤ⤳�Υ��ޥ�ɤ�Ȥ�����