Next: , Up: Makefile Conventions   [Contents]


7.2.1 Makefile¤Î°ìÈÌŪ¤Ê´·Îã

¤¢¤é¤æ¤ëMakefile¤Ï¼¡¤Î¹Ô¤ò´Þ¤à¤Ù¤­¤À¡£

SHELL = /bin/sh

SHELLÊÑ¿ô¤¬´Ä¶­¤«¤é¼õ¤±·Ñ¤¬¤ì¤ë¤è¤¦¤Ê¥·¥¹¥Æ¥à¾å¤Ç¤ÎÌäÂê¤òÈò¤±¤ë¤¿ ¤á¤Ë¡£(¤³¤ì¤ÏGNU make¤Ç¤ÏÌäÂê¤Ë¤Ï·è¤·¤Æ¤Ê¤é¤Ê¤¤¡£)

°Û¤Ê¤ëmake¥×¥í¥°¥é¥à¤Ï¸ß´¹À­¤Î¤Ê¤¤ÀÜÈø¼­¤Î¥ê¥¹¥È¤È°ÅÌۤε¬Â§¤ò»ý ¤Á¡¢¤³¤ì¤Ï¤È¤­¤É¤­º®Íð¤ä¤ª¤«¤·¤Êµóư¤òÀ¸¤ß½Ð¤¹¡£¤À¤«¤éÆÃÄê¤ÎMakefile¤Çɬ ÍפȤ¹¤ëÀÜÈø¼­¤À¤±¤ò»ÈÍѤ¹¤ë¤Î¤Ë¡¢ÌÀ¼¨Åª¤ËÀÜÈø¼­¤Î¥ê¥¹¥È¤òÀßÄꤹ¤ë¤Î¤ÏÎÉ ¤¤¹Í¤¨¤À¡£

.SUFFIXES:
.SUFFIXES: .c .o

ºÇ½é¤Î¹Ô¤ÏÀÜÈø¼­¤Î¥ê¥¹¥È¤ò½èʬ¤·¡¢ÆóÈÖÌܤϤ³¤ÎMakefile¤Ç°ÅÌۤε¬Â§¤ÎÂÐ¾Ý ¤Ë¤Ê¤ë¤«¤â¤·¤ì¤Ê¤¤ÀÜÈø¼­¤¹¤Ù¤Æ¤òƳÆþ¤¹¤ë¡£

.¤¬¥³¥Þ¥ó¥É¼Â¹Ô¤Î¥Ñ¥¹¤ËÆþ¤Ã¤Æ¤¤¤ë¤È²¾Äꤷ¤Æ¤Ï¤¤¤±¤Ê¤¤¡£make¤Î´Ö¤Ë ¤¢¤Ê¤¿¤Î¥Ñ¥Ã¥±¡¼¥¸¤Î°ìÉô¤Ç¤¢¤ë¥×¥í¥°¥é¥à¤òÁö¤é¤»¤ëɬÍפ¬¤¢¤ë¤È¤­¡¢¤½¤Î¥× ¥í¥°¥é¥à¤¬make¤Î°ìÉô¤È¤·¤Æ¹½ÃÛ¤µ¤ì¤ë¤Ê¤é./¤ò»È¤¤¡¢¤â¤·¥Õ¥¡¥¤¥ë¤¬ ¥½¡¼¥¹¡¦¥³¡¼¥É¤ÎÊѹ¹¤µ¤ì¤Ê¤¤Éôʬ¤Ê¤é¡¢$(srcdir)/¤ò»È¤¦¤è¤¦¤Ë¤·¤Æ ¤¯¤À¤µ¤¤¡£¤³¤ì¤é¤ÎÀÜÆ¬¼­¤Î°ì¤Ä¤ò»È¤ï¤Ê¤¤¤È¡¢¸½ºß¤Î¸¡º÷¥Ñ¥¹¤¬»È¤ï¤ì¤ë¡£

./(¹½Ãۥǥ£¥ì¥¯¥È¥ê)¤È$(srcdir)/(¥½¡¼¥¹¡¦¥Ç¥£¥ì ¥¯¥È¥ê)¤Î¶èÊ̤ϡ¢¥æ¡¼¥¶¤Ïconfigure¤Ë‘--srcdir’¥ª¥×¥·¥ç¥ó¤ò »È¤Ã¤ÆÊ̤Υǥ£¥ì¥¯¥È¥ê¤Ç¹½ÃÛ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤Î¤Ç¡¢½ÅÍפǤ¢¤ë¡£¼¡¤Î½ñ¼°¤Î µ¬Â§¤Ï¹½Ãۥǥ£¥ì¥¯¥È¥ê¤¬¥½¡¼¥¹¡¦¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤Ê¤¤¤È¤­¼ºÇÔ¤¹¤ë¡£ foo.man¤Èsedscript¤Ï¥½¡¼¥¹¡¦¥Ç¥£¥ì¥¯¥È¥ê¤ÎÃæ¤Ë¤¢¤ë¤«¤é¤À¡£

foo.1 : foo.man sedscript
        sed -e sedscript foo.man > foo.1

GNU make¤ò»È¤¦¤È¤­¡¢¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò¸«ÉÕ¤±¤ë¤Î¤Ë‘VPATH’¤òÍê ¤ê¤Ë¤¹¤ë¤³¤È¤Ï¡¢Ã±°ì¤Î°Í¸´Ø·¸¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¾å¼ê¤¯¹Ô¤¯¤À¤í¤¦¡£ make¤Î¼«Æ°ÊÑ¿ô‘$<’¤Ï¡¢¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤¬¤É¤³¤Ë¤¢¤Ã¤Æ¤â¡¢¤½¤ì¤ò ɽ¤¹¤«¤é¡£(make¤Î¤¿¤¯¤µ¤ó¤Î¥Ð¡¼¥¸¥ç¥ó¤Ï°ÅÌÛŪµ¬Â§¤Ç¤À¤±‘$<’ ¤òÀßÄꤹ¤ë¡£)

foo.o : bar.c
        $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o

¤³¤Î¤è¤¦¤ÊMakefile¤Î¥¿¡¼¥²¥Ã¥È¤ÏÂå¤ï¤ê¤Ë¼¡¤Î¤è¤¦¤Ë½ñ¤«¤ì¤ë¤Ù¤­¤À¡£

foo.o : bar.c
        $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@

VPATH’¤¬Àµ¤·¤¯Æ¯¤¯¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¡£¥¿¡¼¥²¥Ã¥È¤¬Ê£¿ô¤Î°Í¸´Ø·¸¤ò»ý ¤Ä¤È¤­¡¢ÌÀ¼¨Åª¤Ê‘$(srcdir)’¤ò»È¤¦¤³¤È¤¬¤½¤Îµ¬Â§¤ò¾å¼ê¤¯Æ¯¤«¤»¤ë°ìÈÖ ´Êñ¤ÊÊýË¡¤À¡£Î㤨¤Ð¡¢foo.1¤ËÂФ¹¤ë¥¿¡¼¥²¥Ã¥È¤Ï¼¡¤Î¤è¤¦¤Ë½ñ¤«¤ì¤Æ ¤ë¤Î¤¬°ìÈÖÎɤ¤¡£

foo.1 : foo.man sedscript
        sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@

GNU¤ÎÇÛÉÛʪ¤ÏÉáÄÌ¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¤¡¢¤¤¤¯¤Ä¤«¤Î¥Õ¥¡¥¤¥ë¤ò´Þ¤à¡£—Îã ¤¨¤Ð¡¢Info¥Õ¥¡¥¤¥ë¤äAutoconf¡¢Automake¡¢Bison¤äFlex¤«¤é¤Î½ÐÎϤÀ¡£¤³¤ì¤é ¤Î¥Õ¥¡¥¤¥ë¤ÏÄ̾諒¡¼¥¹¡¦¥Ç¥£¥ì¥¯¥È¥ê¤Ë¸½¤ì¤ë¤Î¤Ç¡¢¤½¤ì¤é¤Ï¹½Ãۥǥ£¥ì¥¯¥È ¥ê¤Ç¤Ï¤Ê¤¯¡¢¾ï¤Ë¥½¡¼¥¹¡¦¥Ç¥£¥ì¥¯¥È¥ê¤Ë¸½¤ì¤ë¤Ù¤­¤À¡£¤À¤«¤é¤½¤ì¤é¤ò¹¹¿·¤¹ ¤ëMakefile¤Îµ¬Â§¤Ï¥½¡¼¥¹¡¦¥Ç¥£¥ì¥¯¥È¥ê¤Ë¹¹¿·¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤òÃÖ¤¯¤Ù¤­¤À¡£

¤·¤«¤·¤Ê¤¬¤é¡¢¤â¤·¥Õ¥¡¥¤¥ë¤¬ÇÛÉÛʪ¤Ë¸½¤ì¤Ê¤¤¤Ê¤é¡¢Makefile¤Ï¥½¡¼¥¹¡¦¥Ç¥£ ¥ì¥¯¥È¥ê¤Ë¤½¤ì¤òÃÖ¤¯¤Ù¤­¤Ç¤Ï¤Ê¤¤¡£¤Ê¤¼¤Ê¤é¡¢ÉáÄ̤δĶ­¤Ç¥×¥í¥°¥é¥à¤ò¹½ÃÛ ¤¹¤ë¤³¤È¤Ç¡¢¤É¤ó¤ÊÊýË¡¤Ç¤â¥½¡¼¥¹¡¦¥Ç¥£¥ì¥¯¥È¥ê¤òÊѹ¹¤¹¤ë¤Ù¤­¤Ç¤Ï¤Ê¤¤¤«¤é ¤À¡£

¹½Ãۤȥ¤¥ó¥¹¥È¡¼¥ë¤Î¥¿¡¼¥²¥Ã¥È¤ò¾¯¤Ê¤¯¤È¤â(¤½¤·¤Æ¤½¤ì¤é¤Î¥µ¥Ö¥¿¡¼¥²¥Ã ¥ÈÁ´¤Æ¤¬)ÊÂÎómake¤ÇÀµ¤·¤¯Æ¯¤¯¤è¤¦¤Ë»î¤ß¤Ê¤µ¤¤¡£