Previous: renamed objects, Up: FAQ [Contents][Index]
¤³¤Î¥»¥¯¥·¥ç¥ó¤Ç¤Ï¡¤Ê£¿ô¤Î½ÐÎÏ¥Õ¥¡¥¤¥ë¤òÀ¸À®¤¹¤ë¤È¤¤Ë»ÈÍѲÄǽ¤Ê
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¤¬Ê¹Ԥ·¤Æ¥Ó¥ë¥É¤µ¤ì¤ë¾ì¹ç¡¤Æó²ófoo data.foo
¥³¥Þ
¥ó¥É¤¬Æ±»þ¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¡¥¤³¤ì¤Ïͳ²¤Ç¤¹¡¥
data.foo
)¤¬µ¶¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤¢
¤ë(¤Þ¤¿¤Ï¤½¤ì¤Ë°Í¸¤¹¤ë)¾õ¶·¤Ç¤¹¡¥
ÊÂÎó¤·¤¿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]