2013ǯ02��08��
Makefile�ΰ�¸�ط��ε��Ҥ�ư�������ñ����ˡ
�ӥ�ɤ�make���ޥ�ɤ�Ȥ��Ȥ��ˤ�Makefile�˥ե�����ΰ�¸�ط���񤤤Ƥ���ɬ�פ�����ޤ���
����������ȯ������ǥ��󥯥롼�ɤ���إå��ե����뤬�����Ƥ���ȡ������ΰ�¸�ط�����Ȥǵ��Ҥ���Τ����ݤǤ���(�����ơ�����򥵥ܤä����Ȥǥϥޤ뤳�Ȥ�褯���뤳�ȤǤ���:)
�����Ǥϡ�gcc�ε�ǽ��ȤäƤ����ư��������ˡ��Ҳ𤷤ޤ���
gcc�Υץ�ץ����å��ǰ�¸�ط���ư��������
gcc�ǥ���ѥ��뤹��Ȥ��� -MD �Ȥ������ץ�����Ĥ���ȡ�����ѥ���ȤȤ�˳�ĥ�Ҥ�.d�Υե����뤬��������ޤ��������Makefile��Ʊ���񼰤Ǥ��Υե�����ΰ�¸�ط������Ҥ���Ƥ��ޤ���
�ܤ�����gcc�Υޥ˥奢��򻲾Ȥ��Ƥ���������
http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Preprocessor-Options.html
����������¸�ط��Υե������Makefile�ˤȤꤳ��
Makefile�����C�Υ���ѥ��륪�ץ����� -MD���ɲä���ˤϡ�Makefile�κǽ�����ǰʲ����ɲä��ޤ���
CFLAGS += -MD
�������줿.d�ե������Ȥꤳ��ˤ�Makefile�κǸ�����˰ʲ����ɲä��ޤ���
-include *.d
��Ƭ��'-'��*.d�Υե����뤬̵����include�����Ԥ������Ǥ⤽���̵�뤹�뤿��λ���Ǥ���
�ޤ�����ư�������줿 *.d�Υե�����������뤿��ˡ�clean�ΤȤ����˰ʲ����ɲä���Ȥ褤�Ǥ��礦��
rm -f *.d
����ץ�
��ñ������������ޤ���
$ cat hello.c #include <stdio.h> #include "message.h" main() { printf("%s, world\n", MESSAGE); } $ cat message.h #define MESSAGE "Hello"
���Τ褦�ˡ�hello.c��message.h�򥤥󥯥롼�ɤ��Ƥ��ޤ���
�Ȥꤢ�����ʲ��Τ褦��Makefile�Ǥ����make���뤳�Ȥ��Ǥ��ޤ���
CFLAGS = -g OBJS = hello.o hello: $(OBJS) clean: rm -f hello $(OBJS)
����������ˤ� hello.o��message.h �˰�¸���Ƥ��뤳�Ȥ����Ҥ���Ƥ��ʤ����ᡢmessage.h�������Ƥ�hello.o�Ϻƥ���ѥ��뤵��ޤ���
�ʲ����ֻ�����ʬ���ɲä��ޤ���
CFLAGS = -g CFLAGS += -MD OBJS = hello.o hello: $(OBJS) clean: rm -f hello $(OBJS) rm -f *.d -include *.d
�����make�����
$ make cc -g -MD -c -o hello.o hello.c cc hello.o -o hello
��ư�������줿hello.d�����Ƥϰʲ����̤�Ǥ���
$ cat hello.d hello.o: hello.c /usr/include/stdio.h /usr/include/features.h \ /usr/include/x86_64-linux-gnu/bits/predefs.h \ /usr/include/x86_64-linux-gnu/sys/cdefs.h \ /usr/include/x86_64-linux-gnu/bits/wordsize.h \ /usr/include/x86_64-linux-gnu/gnu/stubs.h \ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ /usr/include/x86_64-linux-gnu/bits/types.h \ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h \ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h message.h
�����make�ǤϤ���hello.d��Makefile�˥��󥯥롼�ɤ����Τǡ�message.h����������hello.o���ƥ���ѥ��뤵��ޤ���
���ޤ�
�ʲ��Υ��饤�ʡ��ǥ���ѥ����ɬ�פ����ƤΥ������ե����������Ǥ��ޤ���
$ cat *.d | sed -e 's/^.*://' -e 's/\\$//' | tr ' ' '\012' | sort | uniq
(sed�ǹ�Ƭ��:�ޤǤ����������ΥХå�����å��������tr�Ƕ������Ԥ��Ѵ���sort���ƽ�ʣ������)