Previous: renamed objects, Up: FAQ   [Contents][Index]


26.6 ¿¤¯¤Î½ÐÎϤòÀ¸À®¤¹¤ë¥Ä¡¼¥ë¤ò½èÍý¤¹¤ë

¤³¤Î¥»¥¯¥·¥ç¥ó¤Ç¤Ï¡¤Ê£¿ô¤Î½ÐÎÏ¥Õ¥¡¥¤¥ë¤òÀ¸À®¤¹¤ë¤È¤­¤Ë»ÈÍѲÄǽ¤Ê make¤ÎÆÃ¿§¤òµ­½Ò¤·¤Þ¤¹¡¥¤½¤ì¤ÏAutomakeÆÃÍ­¤Î¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤» ¤ó¤¬¡¤Ä̾ï¤ÎMakefile¤Ç»ÈÍѤ¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡¥

°ì¤Ä¤Îdata.foo¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ß¡¤Æó¤Ä¤Îdata.c¤È data.h¤È¤¤¤¦Ì¾Á°¤Î¥Õ¥¡¥¤¥ë¤òÀ¸À®¤¹¤ë¡¤foo¤È¤¤¤¦¥×¥í¥° ¥é¥à¤òÁÛÄꤷ¤Þ¤¹¡¥²æ¡¹¤Ï¡¤°Ê²¼¤Î°ì¤Ä¤Î¤â¤Î¤«¤éÆó¤Ä¤Î¤â¤Î¤Ø¤Î°Í¸¤ò¤È¤é ¤¨¤ëMakefile¥ë¡¼¥ë¤ò½ñ¤³¤¦¤È¤·¤Æ¤¤¤Þ¤¹¡¥

¤½¤Î¤Þ¤Þ¤Î¥ë¡¼¥ë¤Ï´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹¡¥

# This is incorrect.
data.c data.h: data.foo
        foo data.foo

¾åµ­¤Î¥ë¡¼¥ë¤¬¼ÂºÝ¤ËÅÁ¤¨¤Æ¤¤¤ë¤Î¤Ï¡¤data.c¤Èdata.h¤¬¤½¤ì ¤¾¤ìdata.foo¤Ë°Í¸¤·¤Æ¤¤¤Æ¡¤¤½¤ì¤¾¤ì¤¬foo data.foo¤Î¼Â¹Ô ¤Ç¥Ó¥ë¥É²Äǽ¤Ç¤¢¤ë¤È¤¤¤¦¤³¤È¤Ç¤¹¡¥¸À¤¤Âؤ¨¤ë¤È¡¤°Ê²¼¤ÈÅù²Á¤Ç¤¹¡¥

# We do not want this.
data.c: data.foo
        foo data.foo
data.h: data.foo
        foo data.foo

¤³¤ì¤Ï¡¤foo¤òÆó²ó¼Â¹Ô¤¹¤ë¤Ï¤º¤À¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡¥ make¤Î¼ÂÁõ¤Ç¤Ï¡¤ºÇ½é¤Î°ì¤Ä¤¬¥Ó¥ë¥É¤µ¤ì¤¿¸å¤ËÆóÈÖÌܤΥե¡¥¤¥ë ¤Î¸ºß¤òÄ´ºº¤¹¤ë¤è¤¦½½Ê¬¤Ë¸­¤¤¤â¤Î¤Ê¤Î¤Ç¡¤ÉáÄÌ¤ÏÆó²ó¼Â¹Ô¤µ¤ì¤Ê¤¤¤Ç¤·¤ç ¤¦¡¥¤¹¤Ê¤ï¤Á¡¤¤¹¤Ç¤Ë¸ºß¤·¤Æ¤¤¤ë¤³¤È¤¬¤ï¤«¤Ã¤Æ¤¤¤Þ¤¹¡¥¤·¤«¤·¡¤¾ì¹ç¤Ë¤è¤Ã ¤Æ¤ÏÆó²ó¼Â¹Ô¤µ¤ì¤ë²ÄǽÀ­¤â¤¢¤ê¤Þ¤¹¡¥

ÊÂÎó¤·¤¿make¤Îưºî¤ò²ò·è¤·¡¤µ¶¤Î°Í¸À­¤Ï²ò·è¤Ç¤­¤Ê¤¤ÊýË¡¤È¤· ¤Æ°Ê²¼¤Î¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡¥

data.c data.h: data.foo
        foo data.foo
data.h: data.c

¾åµ­¤Î¥ë¡¼¥ë¤Ï°Ê²¼¤ÈÅù²Á¤Ç¤¹¡¥

data.c: data.foo
        foo data.foo
data.h: data.foo data.c
        foo data.foo

¤³¤ì¤Ç¡¤ÊÂÎó¤·¤¿make¤Ï¡¤data.c¤Èdata.h¤ÎϢ³¤· ¤¿¥Ó¥ë¥É¤Ë¤Ê¤ê¡¤ÆóÈÖÌܤϰì²óÌܤǽª¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¤¤â¤Ï¤äÉÔÍפǤ¢¤ë¤³¤È¤ò ¸¡½Ð¤·¤Þ¤¹¡¥

¤³¤Î¥Ñ¥¿¡¼¥ó¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¤¤ª¤½¤é¤¯¤Û¤È¤ó¤É¤Î¾õ¶·¤ò½½Ê¬Ëþ¤¿¤¹¤Ç¤·¤ç ¤¦¡¥¤·¤«¤·¡¤½ÐÎÏ¥Õ¥¡¥¤¥ë¤¬Â¿¤¯¤Ê¤ë¤Ë¤Ä¤ì(¤³¤Î¼êË¡¤Ç¤Ï¡¤¤¹¤Ù¤Æ¤Î½ÐÎÏ¥Õ¥¡ ¥¤¥ë¤ò°Í¸´Ø·¸¤Î´°Á´¤Ê½çÈ֤ˤ¹¤ëɬÍפ¬¤¢¤ê)Æñ¤·¤¯¤Ê¤ë¤Î¤Ç¡¤²æ¡¹¤Ï¤è¤ê Ê£»¨¤Ê²ò·èÊýË¡¤òõ¤ê¤Þ¤·¤¿¡¥

¤â¤¦°ì¤Ä¤Î¹Í¤¨¤Ï¡¤°Ê²¼¤Î¤è¤¦¤Ë½ñ¤¯¤³¤È¤Ç¤¹¡¥

# There is still a problem with this one.
data.c: data.foo
        foo data.foo
data.h: data.c

¤³¤Î¹Í¤¨¤Ï¡¤foo data.foo¤Ïdata.c¤ò¹¹¿·¤¹¤ëɬÍפ¬¤¢¤ë¤È¤­ ¤À¤±¼Â¹Ô¤µ¤ì¤Þ¤¹¤¬¡¤²æ¡¹¤Ï¡¤data.h¤¬data.c¤Ë°Í¸¤¹¤ë¤È¤¤ ¤¦°ìÊâÀè¤ÎΩ¾ì¤Ë¤¤¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡¥¤Ä¤Þ¤ê¡¤data.h¤¬É¬Íפˤʤꡤ data.foo¤¬¸Å¤¤¾ì¹ç¡¤data.c¤Î°Í¸À­¤Ë¤è¤Ã¤Æ¥Ó¥ë¥É¤¬³«»Ï¤µ ¤ì¤ë¤Ç¤·¤ç¤¦¡¥

¤³¤ì¤Ç¤Û¤È¤ó¤É´°àú¤Ç¤¹¤¬¡¤²æ¡¹¤Ï¡¤data.h¤Èdata.c¤ò¥Ó¥ë¥É ¤·¤Æ¤ª¤­¡¤¤½¤Î¸å¤Çdata.h¤òºï½ü¤¹¤ë¤³¤È¤òÄ󰯤·¤Þ¤¹¡¥¤½¤¦¤¹¤ë¤³ ¤È¤Ç¡¤make data.h¤Î¤È¤­data.h¤Ï¥ê¥Ó¥ë¥É¤µ¤ì¤Þ¤»¤ó¡¥¾åµ­ ¤Î¥ë¡¼¥ë¤Ç¤Ï¡¤data.foo¤ËÂбþ¤·¤Ædata.c¤Ï¹¹¿·¤¹¤ëɬÍפ¬¤¢ ¤ê¤Þ¤¹¤¬¡¤´û¤Ë¤½¤¦¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥

²æ¡¹¤¬É¬Íפʤâ¤Î¤Ï¡¤data.h¤¬¤Ê¤¤¤È¤­¤Ë¥ê¥Ó¥ë¥É¤ò¶¯À©¤¹¤ë¥ë¡¼¥ë ¤Ç¤¹¡¥°Ê²¼¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡¥

data.c: data.foo
        foo data.foo
data.h: data.c
        @if test -f $@; then :; else \
          rm -f data.c; \
          $(MAKE) $(AM_MAKEFLAGS) data.c; \
        fi

¾åµ­¤Ç¤Ï¡¤½ÐÎÏ¤ÈÆþÎϤ¬Â¿¤¯¤Ê¤Ã¤Æ¤â´Êñ¤Ç¤¹¡¥½ÐÎϤΰì¤Ä¤Ï¡¤¥³¥Þ¥ó¥É¼Â¹Ô ¤Î¾Úµò¤È¤·¤ÆÄ󶡤µ¤ì¤ë¤¿¤á¤ËɬÍפʤâ¤Î¤¬Ê¬¤«¤ê¡¤¤½¤ì¤Ï¤¹¤Ù¤Æ¤ÎÆþÎÏ¤Ë°Í Â¸¤·¡¤¤½¤ì°Ê³°¤Î½ÐÎÏ¥Õ¥¡¥¤¥ë¤â¤¹¤Ù¤Æ¤½¤ì¤Ë°Í¸¤·¤Þ¤¹¡¥Î㤨¤Ð¡¤ foo¤Ëdata.bar¤ÎÆÉ¤ß¹þ¤ß¤òÄɲä·¡¤data.w¤È data.x¤â½ÐÎϤµ¤»¤ë¾ì¹ç¡¤°Ê²¼¤Î¤è¤¦¤Ë½ñ¤¯¤Ç¤·¤ç¤¦¡¥

data.c: data.foo data.bar
        foo data.foo data.bar
data.h data.w data.x: data.c
        @if test -f $@; then :; else \
          rm -f data.c; \
          $(MAKE) $(AM_MAKEFLAGS) data.c; \
        fi

¤³¤ÎÀßÄê¤Ç¤Ï¡¤¤Á¤ç¤Ã¤È¤·¤¿ÌäÂ꤬»Ä¤Ã¤Æ¤¤¤Þ¤¹¡¥foo¤Î½ÐÎÏ¤Ï»Í ¤Ä¤Î¥Õ¥¡¥¤¥ë¤Ç¤¹¤¬¡¤¤³¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤¬À¸À®¤µ¤ì¤ë½ç½ø¤¬Ê¬¤«¤ê¤Þ¤»¤ó¡¥ data.h¤¬data.c¤ÎÁ°¤ËºîÀ®¤µ¤ì¤ë¤È²¾Äꤷ¤Þ¤¹¡¥¤½¤¦¤Ê¤ë¤È´ñ ̯¤Ê¾õ¶·¤Ë´Ù¤ê¤Þ¤¹¡¥¼¡¤Ëmake¤¬¼Â¹Ô¤µ¤ì¤ë¤È¡¤data.h¤Ï data.c¤è¤ê¸Å¤¯¤Ê¤ê¡¤ÆóÈÖÌܤΥ롼¥ë¤¬³«»Ï¤µ¤ì¡¤¥·¥§¥ë¤Ï if...fi¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Þ¤¹¤¬¡¤¼ÂºÝ¤Ë¤Ïthen¤ÎÃæ¤À¤±¤¬¼Â ¹Ô¤µ¤ì¡¤¤¹¤Ê¤ï¤Á²¿¤âµ¯¤³¤ê¤Þ¤»¤ó¡¥¸À¤¤Âؤ¨¤ë¤È¡¤²æ¡¹¤¬ÁªÂò¤·¤¿¾Úµò¤Ï foo¤¬À¸À®¤¹¤ëºÇ½é¤Î¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¤make¤Ï¼Â ¹Ô¤·¤Æ¤â²¿¤â¤·¤Ê¤¤¥·¥§¥ë¤ò³«»Ï¤·¤Þ¤¹¡¥

´Êñ¤ÊÅú¤¨¤Ï¡¤¤³¤ì¤¬À¸¤¸¤¿¤È¤­¤Ë¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò½¤Àµ¤¹¤ë¤³¤È¤Ç¤¹¡¥

data.c: data.foo data.bar
        foo data.foo data.bar
data.h data.w data.x: data.c
        @if test -f $@; then \
          touch $@; \
        else \
          rm -f data.c; \
          $(MAKE) $(AM_MAKEFLAGS) data.c; \
        fi

¤â¤¦°ì¤Ä¤Î²ò·èÊýË¡¤Ï¡¤°ÊÁ°¤Î¤â¤Î¤È¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó¤¬¡¤ foo¤Î½ÐÎϤ¹¤ë¤â¤Î¤Ç¤Ï¤Ê¤¯¡¤Ê̤ÎÀìÍÑ¥Õ¥¡¥¤¥ë¤ò¾Úµò¤È¤·¤Æ»ÈÍÑ ¤¹¤ë¤³¤È¤Ç¤¹¡¥

data.stamp: data.foo data.bar
        @rm -f data.tmp
        @touch data.tmp
        foo data.foo data.bar
        @mv -f data.tmp $@
data.c data.h data.w data.x: data.stamp
        @if test -f $@; then \
          touch $@; \
        else \
          rm -f data.stamp; \
          $(MAKE) $(AM_MAKEFLAGS) data.stamp; \
        fi

foo¤¬¼Â¹Ô¤µ¤ì¤ëÁ°¤Ëdata.tmp¤¬ºîÀ®¤µ¤ì¤ë¤Î¤Ç¡¤¤½¤Î¥¿¥¤ ¥à¥¹¥¿¥ó¥×¤Ïfoo¤¬½ÐÎϤ¹¤ë¥Õ¥¡¥¤¥ë¤è¤ê¸Å¤¯¤Ê¤ê¤Þ¤¹¡¥¤½¤·¤Æ¡¤ foo¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤Ïdata.stamp¤ò¹¹¿·¤·¤¿¤¯¤Ê¤¤¤Î¤Ç¡¤ data.stamp¤òfoo¤Î¼Â¹Ô¸å¤Ë̾Á°¤òÊѹ¹¤·¤Þ¤¹¡¥

¤³¤Î¤è¤¦¤ÊÀìÍѤξڵò¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¤½ÐÎÏ¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤¬Á°¤â¤Ã¤ÆÊ¬ ¤«¤é¤Ê¤¤¤È¤­¤â´Êñ¤Ë½èÍý¤Ç¤­¤Þ¤¹¡¥Îã¤È¤·¤Æ¡¤Ã±°ì¤Î¥³¥Þ¥ó¥É¤Ç¡¤¤¿¤¯¤µ¤ó ¤Î*.el¥Õ¥¡¥¤¥ë¤ò*.elc¤Ë¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¡¤°Ê²¼¤Î¥ë¡¼¥ë¤ò¹Í ¤¨¤Æ¤¯¤À¤µ¤¤¡¥ELFILES¤ÎÄêµÁÊýË¡¤Ï(¤½¤ì¤¬¶õ¤Ç¤Ï¤Ê¤¤¸Â¤ê)ÌäÂê¤Ë¤Ê ¤ê¤Þ¤»¤ó(¶õ¤Î¥¿¡¼¥²¥Ã¥È¤ÏPOSIX¤Ç¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó)¡¥

ELFILES = one.el two.el three.el …
ELCFILES = $(ELFILES:=c)

elc-stamp: $(ELFILES)
        @rm -f elc-temp
        @touch elc-temp
        $(elisp_comp) $(ELFILES)
        @mv -f elc-temp $@

$(ELCFILES): elc-stamp
        @if test -f $@; then \
          touch $@; \
        else \
          rm -f elc-stamp; \
          $(MAKE) $(AM_MAKEFLAGS) elc-stamp; \
        fi

»Å¾å¤²¤Ë¡¤GNU make¤Ï¡¤¥Ñ¥¿¡¼¥ó¥ë¡¼¥ë¤ò»ÈÍѤ¹¤ë¤³¤È¤ÇÊ£¿ô¤Î½Ð ÎÏ¥Õ¥¡¥¤¥ë¤òÍѤ¤¤¿¥ë¡¼¥ë¤òɽ¸½¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹(see Pattern Rule Examples in The GNU Make Manual)¡¥¥Ñ¥¿¡¼ ¥ó¥ë¡¼¥ë¤Ï°Ü¿¢À­¤¬¤Ê¤¤¤Î¤Ç¡¤²æ¡¹¤Ï¤³¤³¤ÇµÄÏÀ¤·¤Þ¤»¤ó¤¬¡¤GNU make¤òÁÛÄꤷ¤¿¥Ñ¥Ã¥±¡¼¥¸¤Ç¤ÏÊØÍø¤Ë¤Ê¤ë¤Ï¤º¤Ç¤¹¡¥


Previous: renamed objects, Up: FAQ   [Contents][Index]