Up: Sources   [Contents][Index]


8.4.1 ¥Ó¥ë¥É¤µ¤ì¤Æ¤¤¤ë¤Ù¤­¥½¡¼¥¹¤ÎÎã

¥¤¥ó¥¹¥È¡¼¥ë¤Ë°Í¸¤·¤Æ¤¤¤Æ¡¤ÇÛÉۤˤϰ͸¤·¤Æ¤¤¤Ê¤¤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¤«¤ébindir.h¤ò¥Ó¥ë¥É

¥×¥ê¥×¥í¥»¥Ã¥µ¥Þ¥¯¥í¤ò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.h¤Ç¤Ï¤Ê¤¯bindir.c¤ò¥Ó¥ë¥É

¤â¤¦°ì¤Ä¤ÎÌ¥ÎÏŪ¤Ê¹Í¤¨¤Ï¡¤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¥Õ¥¡¥¤¥ë¤ËÊÑ´¹¤¹¤ë¤³¤È¤Ï¡¤¾ï¤Ë²Äǽ¤À¤È¤¤¤¦¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥


Up: Sources   [Contents][Index]