¥¤¥ó¥¹¥È¡¼¥ë¤Ë°Í¸¤·¤Æ¤¤¤Æ¡¤ÇÛÉۤˤϰ͸¤·¤Æ¤¤¤Ê¤¤bindir.h¤ò¥¤
¥ó¥¯¥ë¡¼¥É¤·¤Æ¤¤¤ëfoo.c¤ò²¾Äꤷ¤Þ¤¹¡¥¤½¤ì¤Ï¥Ó¥ë¥É¤ÇÍ׵ᤵ¤ì¤Þ¤¹¡¥
¤³¤³¤Ç¡¤bindir.h¤Ï¡¤(configure¤«¤é·Ñ¾µ¤µ¤ì¤ë)
make
ÊÑ¿ôbindir
¤ÎÃͤò¤â¤Ä¥×¥ê¥×¥í¥»¥Ã¥µ¥Þ¥¯¥í
bindir
¤òÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡¤
²æ¡¹¤Ï°Ê²¼¤Î¼ÂÁõ¤òÄ󰯤·¤Þ¤¹¡¥¥Ó¥ë¥É¤µ¤ì¤Æ¤¤¤ë¥½¡¼¥¹¤ò½èÍý¤¹¤ë¤¹¤Ù¤Æ¤Î ÊýË¡¤Î¥ê¥¹¥È¤òÌÖÍ夷¤Æ¤¤¤Þ¤»¤ó¤¬¡¤¤³¤ÎÌäÂê¤ËÁø¶ø¤·¤¿¾ì¹ç¡¤¤Á¤ç¤Ã¤È¤·¤¿ ¥¢¥¤¥Ç¥¢¤Ë¤Ï¤Ê¤ë¤Ç¤·¤ç¤¦¡¥
ºÇ½é¤Î¼ÂÁõ¤Ï¡¤Á°¤Î¥»¥¯¥·¥ç¥ó¤Î¥Ö¡¼¥È¥¹¥È¥é¥Ã¥×¤ÎÌäÂê¤òÀâÌÀ¤·¤Þ¤¹ (see Sources)¡¥
°Ê²¼¤Ï¡¤»î¸³Åª¤ÊMakefile.am¤Ç¤¹¡¥
# This won't work. bin_PROGRAMS = foo foo_SOURCES = foo.c nodist_foo_SOURCES = bindir.h CLEANFILES = bindir.h bindir.h: Makefile echo '#define bindir "$(bindir)"' >$@
Automake¤Ï¡¤foo.c¤¬bindir.h¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë¤³¤È¤òÃÎ¤é ¤Ê¤¤¤Î¤Ç¡¤¤³¤ÎÀßÄê¤Ç¤Ïưºî¤·¤Þ¤»¤ó¡¥¼«Æ°Åª¤Ê°Í¸À¤ÎÄÉÀפϥ³¥ó¥Ñ¥¤¥ë¤Î ÉûºîÍѤȤ·¤ÆÆ°ºî¤¹¤ë¤Î¤Ç¡¤foo.o¤Î°Í¸À¤Ï¡¤foo.o¤¬¥³¥ó¥Ñ ¥¤¥ë¤µ¤ì¤¿¸å¤Ë¤Ê¤Ã¤ÆÈ½ÌÀ¤¹¤ë¤³¤È(see Dependencies)¤ò³Ð¤¨¤Æ¤ª¤¤¤Æ²¼ ¤µ¤¤¡¥¾É¾õ¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡¥
% make source='foo.c' object='foo.o' libtool=no \ depfile='.deps/foo.Po' tmpdepfile='.deps/foo.TPo' \ depmode=gcc /bin/sh ./depcomp \ gcc -I. -I. -g -O2 -c `test -f 'foo.c' || echo './'`foo.c foo.c:2: bindir.h: No such file or directory make: *** [foo.o] Error 1
¤³¤ÎÎã¤Ç¤Ï¡¤bindir.h¤Ï¡¤ÇÛÉۤ⥤¥ó¥¹¥È¡¼¥ë¤â¤µ¤ì¤º¡¤°ìÅÙ¤â¥Ó¥ë
¥É¤µ¤ì¤Þ¤»¤ó¡¥nodist_foo_SOURCES = bindir.h
¹Ô¤¬Á´¤¯ÍøÍѤµ¤ì¤Æ¤¤
¤Ê¤¤¤³¤È¤òÉԻ׵Ĥ˻פ¦¤«¤â¤·¤ì¤Þ¤»¤ó¡¥¤³¤Îbindir.h¤¬foo
¤Î¥½¡¼¥¹¤À¤È¤¤¤¦Ã±½ã¤Ê¹Ô¤Ï¡¤Î㤨¤Ð¡¤tag¤òÀ¸À®¤·¤Æ¤¤¤ë´Ö¤Ë¸¡ºº¤µ¤ì¤ë¤Ù
¤¤Ê¤Î¤Ç¸ºß¤·¤Þ¤¹(see Tags)¡¥¸À¤¤Âؤ¨¤ë¤È¡¤¤³¤³¤Ç¤ÎÌäÂê¤Ë¤ÏÌò¤ËΩ
¤¿¤º¡¤¤½¤ì¤¬Ìµ¤¯¤Æ¤âƱ¤¸¤è¤¦¤Ë¥Ó¥ë¥É¤Ï¼ºÇÔ¤·¤Þ¤¹¡¥
BUILT_SOURCES
¤Î»ÈÍѲò·èÊýË¡¤Ï¡¤Â¾¤Î¤â¤Î¤ò¥Ó¥ë¥É¤¹¤ëÁ°¤Ëbindir.h¤ò¥Ó¥ë¥É¤¹¤ë¤³¤È¤ò
Í׵᤹¤ë¤³¤È¤Ç¤¹¡¥¤³¤ì¤³¤½¤¬¡¤BUILT_SOURCES
¤¬°ÕÌ£¤¹¤ë¤³¤È¤Ç¤¹
(see Sources)¡¥
bin_PROGRAMS = foo foo_SOURCES = foo.c nodist_foo_SOURCES = bindir.h BUILT_SOURCES = bindir.h CLEANFILES = bindir.h bindir.h: Makefile echo '#define bindir "$(bindir)"' >$@
bindir.h¤¬ºÇ½é¤Ë¥Ó¥ë¥É¤µ¤ì¤ëÍͻҤò¸«¤Æ²¼¤µ¤¤¡¥
% make echo '#define bindir "/usr/local/bin"' >bindir.h make all-am make[1]: Entering directory `/home/adl/tmp' source='foo.c' object='foo.o' libtool=no \ depfile='.deps/foo.Po' tmpdepfile='.deps/foo.TPo' \ depmode=gcc /bin/sh ./depcomp \ gcc -I. -I. -g -O2 -c `test -f 'foo.c' || echo './'`foo.c gcc -g -O2 -o foo foo.o make[1]: Leaving directory `/home/adl/tmp'
¤·¤«¤·¡¤°ÊÁ°¤Ë¤¤¤Ã¤¿¤è¤¦¤Ë¡¤BUILT_SOURCES
¤Ïall
¡¤
check
¡¤¤½¤·¤Æinstall
¥¿¡¼¥²¥Ã¥È¤À¤±¤Ë¤·¤«Å¬ÍѤµ¤ì¤Þ¤»¤ó¡¥
¤³¤ì¤Ç¤Ï¡¤make foo
¤òÌÀ¼¨Åª¤Ë¼Â¹Ô¤¹¤ë¤È¼ºÇÔ¤·¤Þ¤¹¡¥
% make clean test -z "bindir.h" || rm -f bindir.h test -z "foo" || rm -f foo rm -f *.o % : > .deps/foo.Po # Suppress previously recorded dependencies % make foo source='foo.c' object='foo.o' libtool=no \ depfile='.deps/foo.Po' tmpdepfile='.deps/foo.TPo' \ depmode=gcc /bin/sh ./depcomp \ gcc -I. -I. -g -O2 -c `test -f 'foo.c' || echo './'`foo.c foo.c:2: bindir.h: No such file or directory make: *** [foo.o] Error 1
Ä̾make all
¤ÎÁ°¤Ëmake foo
¤Ë¤è¤¦¤Ë¥¿¡¼¥²¥Ã¥È¤ò¥Ó¥ë¥É¤¹
¤ë¤³¤È¤Ï¤Ê¤¤¤Î¤Ç¡¤Á°²ó¤ÎÎã¤Î¤è¤¦¤ËBUILT_SOURCES
¤Ç½½Ê¬¹¬¤»¤Ë¤Ê¤ì
¤Þ¤¹¡¥¤·¤«¤·¡¤¤³¤ì¤ÇÌäÂ꤬¤¢¤ë¾ì¹ç¡¤BUILT_SOURCES
¤òÈò¤±¡¤
Makefile.am¤ËÌÀ¼¨Åª¤Ë¤½¤Î¤è¤¦¤Ê°Í¸À¤òµÏ¿¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡¥
bin_PROGRAMS = foo foo_SOURCES = foo.c nodist_foo_SOURCES = bindir.h foo.$(OBJEXT): bindir.h CLEANFILES = bindir.h bindir.h: Makefile echo '#define bindir "$(bindir)"' >$@
foo.o
¤Î¤¹¤Ù¤Æ¤Î°Í¸À¤ò¥ê¥¹¥È¥¢¥Ã¥×¤¹¤ëɬÍפϤʤ¯¡¤¥Ó¥ë
¥É¤ËɬÍפʤâ¤Î¤À¤±¤ò¥ê¥¹¥È¥¢¥Ã¥×¤·¤Þ¤¹¡¥°Í¸À¤¬´û¤Ë¸ºß¤¹¤ë¾ì¹ç¡¤ºÇ½é
¤Î¥³¥ó¥Ñ¥¤¥ë¤Ï¼ÙËâ¤ò¤»¤º¡¤Ä̾ï¤Î°Í¸À¤ÎÄÉÀ×¥³¡¼¥É¤¬µÏ¿¤µ¤ì¤Þ¤¹¡¥(¤³
¤ÎºÇ½é¤Î¥³¥ó¥Ñ¥¤¥ë¤Î¸å¤Î°Í¸À¤ÎÄÉÀ×¥³¡¼¥É¤â¡¤foo.o
¤È
bindir.h
¤Î´Ö¤ËµÏ¿¤µ¤ì¤ë¤³¤È¤ËÃí°Õ¤·¤Æ²¼¤µ¤¤¡¥¤½¤Î¤¿¤á¡¤ÌÀ¼¨Åª
¤Ê°Í¸À¤ÏºÇ½é¤Î¥Ó¥ë¥É¤À¤±¤Ç¼ÂºÝ¤ËÌò¤ËΩ¤Á¤Þ¤¹¡¥)
¤³¤Î¤è¤¦¤ÊÌÀ¼¨Åª¤Ê°Í¸À¤òÄɲ乤뤳¤È¤Ç¡¤½½Ê¬¤ËÃí°Õ¤·¤Æ¤ª¤«¤Ê¤¤¤È¤Á¤ç¤Ã
¤È´í¸±¤Ê¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡¥¤³¤ì¤ÏAutomake¤¬¥ë¡¼¥ë¤ò¾å½ñ¤¤·¤è¤¦¤È¤·¤Ê¤¤¤³
¤È¤ËͳÍ褷¤Þ¤¹(¤ª¤½¤é¤¯¡¤¤è¤êÎɤ¤¤â¤Î¤òÃΤäƤ¤¤ë¤Ç¤·¤ç¤¦)¡¥
foo.$(OBJEXT): bindir.h
¤Ç¡¤foo.$(OBJEXT)
¤ò¥Ó¥ë¥É¤¹¤ë¤¿¤á
¤Ë½ÐÎϤ·¤è¤¦¤È¤¹¤ëAutomake¤Î¥ë¡¼¥ë¤òÃÖ¤´¹¤¨¤Þ¤¹¡¥¤³¤Î¾õ¶·¤Ç¤Ï¡¤
Automake¤Ïfoo.$(OBJEXT):
¥¿¡¼¥²¥Ã¥È¤ò½ÐÎϤ¹¤ëɬÍפ¬¤Ê¤¤¤Î¤Ç¶öÁ³
ưºî¤·¤Þ¤¹¡¥¤½¤ì¤Ï¡¤Âå¤ï¤ê¤Ë¥µ¥Õ¥£¥Ã¥¯¥¹¥ë¡¼¥ë¤Ë´ØÏ¢¤·¤Þ¤¹(¤¹¤Ê¤ï¤Á
.c.$(OBJEXT):
)¡¥¤³¤¦¤¹¤ë¾ì¹ç¤Ï¡¤¾ï¤ËÀ¸À®¤µ¤ì¤ë
Makefile.in¤òÄ´ºº¤·¤Æ²¼¤µ¤¤¡¥
¥×¥ê¥×¥í¥»¥Ã¥µ¥Þ¥¯¥í¤òconfigure¤«¤é¡¤
config.h(see Defining Directories in The Autoconf Manual)¡¤¤Þ¤¿¤ÏAC_CONFIG_FILES
¤ò»ÈÍѤ·
¤Æbindir.h.in¤Ç(see Configuration
Actions in The Autoconf Manual)ÄêµÁ¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡¥
¤³¤Î»þÅÀ¤Ç¡¤configure¤«¤ébindir.h¤¬¥Ó¥ë¥É¤µ¤ì¤ë¤³¤È¤¬ÌÀ ³Î¤Ë¤Ê¤ê¡¤¤³¤ÎÎã¤Ï¤¦¤Þ¤¯Æ°ºî¤·¤Þ¤¹¡¥bindir.h¤Ï¥¿¡¼¥²¥Ã¥È¤ò¥Ó¥ë ¥É¤¹¤ëÁ°¤Ë¸ºß¤·¤Æ¤¤¤ë¤Î¤Ç¡¤°Í¸À¤ÎÌäÂê¤ÏÀ¸¤¸¤Þ¤»¤ó¡¥
Makefile¤Ï°Ê²¼¤Î¤è¤¦¤Ëû¤¯¤Ê¤ê¤Þ¤¹¡¥bindir.h¤òµ½Ò¤¹¤ëɬÍפµ¤¨ ¤¢¤ê¤Þ¤»¤ó¡¥
bin_PROGRAMS = foo foo_SOURCES = foo.c
¤·¤«¤·¡¤configure¤«¤é¥½¡¼¥¹¤ò¥Ó¥ë¥É¤¹¤ë¤³¤È¤¬¾ï¤Ë²Äǽ¤À¤È¤¤¤¦¤ï ¤±¤Ç¤Ï¤Ê¤¯¡¤ÆÃ¤Ë¡¤¤³¤ì¤é¤Î¥½¡¼¥¹¤¬ºÇ½é¤Ë¥Ó¥ë¥É¤µ¤ì¤ë¥Ä¡¼¥ë¤«¤éÀ¸À®¤µ¤ì ¤ë¤È¤¤¬¤½¤¦¤Ê¤ê¤Þ¤¹...
¤â¤¦°ì¤Ä¤ÎÌ¥ÎÏŪ¤Ê¹Í¤¨¤Ï¡¤bindir
¤òbindir.o¤«¤é¥¨¥¯¥¹¥Ý¡¼
¥È¤¹¤ëÊÑ¿ô¤ä´Ø¿ô¤È¤·¤ÆÄêµÁ¤·¡¤bindir.h¤ÎÂå¤ï¤ê¤Ëbindir.c
¤ò¥Ó¥ë¥É¤¹¤ëÊýË¡¤Ç¤¹¡¥
noinst_PROGRAMS = foo foo_SOURCES = foo.c bindir.h nodist_foo_SOURCES = bindir.c CLEANFILES = bindir.c bindir.c: Makefile echo 'const char bindir[] = "$(bindir)";' >$
bindir.h¤Ë¤Ï¡¤Àë¸À¤µ¤ì¤¿ÊÑ¿ô¤À¤±¤¬´Þ¤Þ¤ì¤Æ¤¤¤Æ¡¤¥Ó¥ë¥É¤¹¤ëɬÍ× ¤¬¤Ê¤¤¤¿¤á¡¤ÌäÂê¤Ë¤Ê¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡¥bindir.o¤Ï¡¤¾ï¤Ë bindir.c¤Ë°Í¸¤¹¤ë¤Î¤Ç¡¤bindir.c¤ÏºÇ½é¤Ë¥Ó¥ë¥É¤µ¤ì¤Þ¤¹¡¥
¤â¤Á¤í¤óËüǽÌô¤Ï¤¢¤ê¤Þ¤»¤ó¡¥¤½¤ì¤¾¤ì¤Î²ò·èÊýË¡¤Ë¤ÏĹ½ê¤Èû½ê¤¬¤¢¤ê¤Þ¤¹¡¥
¥¯¥ê¡¼¥ó¤Ê¥Ä¥ê¡¼¤Çmake foo
¤ò¼Â¹Ô¤¹¤ëǽÎϤ¬½ÅÍפʾì¹ç¡¤
BUILT_SOURCES
¤ò»ÈÍѤ¹¤ë¤³¤È¤ÏÉÔ²Äǽ¤Ç¤¹¡¥
Automake¤Î¥ë¡¼¥ë¤ò´Ö°ã¤Ã¤Æ¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Ê¤¤¤è¤¦¤ËÍÑ¿´¤·¤Æ¤¤¤ë¾ì¹ç¡¤ ÌÀ¼¨Åª¤Ë°Í¸À¤òÄɲ䷤ʤ¤¤Ç¤·¤ç¤¦¡¥
./configure¤«¤é¥Õ¥¡¥¤¥ë¤ò¥Ó¥ë¥É¤·¤¿¤ê¡¤.h¥Õ¥¡¥¤¥ë¤ò .c¥Õ¥¡¥¤¥ë¤ËÊÑ´¹¤¹¤ë¤³¤È¤Ï¡¤¾ï¤Ë²Äǽ¤À¤È¤¤¤¦¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥