Automake ±â´ÉÀÇ ¸¹Àº ºÎºÐÀº C ÇÁ·Î±×·¥°ú ¶óÀ̺귯¸®¸¦ ½±°Ô ¸¸µé ¼ö ÀÖµµ·Ï Çϱâ À§ÇÑ °ÍÀÌ´Ù.
(¶óÀ̺귯¸®¿¡ ´ëÁ¶µÇ¾î) ÇÁ·Î±×·¥À¸·Î ºôµåµÇ´Â ¼Ò½º°¡ µé¾î ÀÖ´Â µð·ºÅ丮¿¡¼, `PROGRAMS' primary°¡ »ç¿ëµÈ´Ù. ÇÁ·Î±×·¥Àº `bindir', `sbindir', `libexecdir', `pkglibdir'¿¡ ¼³Ä¡µÇ°Å³ª, ¾Æ¿¹ ¼³Ä¡µÇÁö ¾ÊÀ» ¼öµµ (`noinst') ÀÖ´Ù.
¿¹¸¦ µé¾î:
bin_PROGRAMS = hello
À§ÀÇ °£´ÜÇÑ °æ¿ì¿¡¼, `Makefile.in'Àº °á°úÀûÀ¸·Î hello
¶ó´Â
À̸§ÀÇ ÇÁ·Î±×·¥À» ¸¸µå´Â Äڵ带 °®°Ô µÉ °ÍÀÌ´Ù. hello_SOURCES
º¯¼ö´Â ¾î¶² ¼Ò½º ÆÄÀÏÀÌ ½ÇÇà ÆÄÀÏ·Î buildµÉ °ÍÀÎÁö ¾Ë¸®´Â µ¥ ¾²ÀδÙ.
hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h
À§´Â °¢ `.c' ÆÄÀÏÀÌ ´ëÀÀµÇ´Â `.o' ÆÄÀÏ·Î ÄÄÆÄÀϵǰí, ±× ´ÙÀ½¿¡ ¸µÅ©µÇ¾î `hello'¸¦ ¸¸µéµµ·Ï ÇÑ´Ù.
`prog_SOURCES'°¡ ÇÊ¿äÇѵ¥ ¾ð±ÞµÇÁö ¾ÊÀº °æ¿ì, ±âº»Àº ÇÑ°³ÀÇ
`prog.c' ÆÄÀÏÀÌ´Ù. À§ÀÇ ¿¹¿¡¼, hello_SOURCES
ÀÇ Á¤ÀÇ´Â
½ÇÁ¦·Î´Â ÇÊ¿ä¾ø´Â °ÍÀÌ´Ù.
ÇÑ°³ÀÇ µð·ºÅ丮¿¡¼ ¿©·¯°³ÀÇ ÇÁ·Î±×·¥ÀÌ buildµÉ ¼ö ÀÖ´Ù. ¿©·¯°³ÀÇ ÇÁ·Î±×·¥Àº ÇÑ°³ÀÇ ¼Ò½º ÆÄÀÏÀ» °øÀ¯ÇÒ ¼ö ÀÖ´Ù. ±× ¼Ò½º ÆÄÀÏÀº °¢°¢ÀÇ `_SOURCES' Á¤ÀÇ¿¡ ¿°ÅµÇ¾î¾ß ÇÑ´Ù.
`_SOURCES' Á¤ÀÇ¿¡ ¿°ÅµÈ Çì´õ ÆÄÀϵéÀº ¹èÆ÷º»¿¡ Æ÷Ç﵃ °ÍÀÌÁö¸¸, ÇÑÆí ¹«½ÃµÉ °ÍÀÌ´Ù. ¸í¹éÇÏÁö ¾ÊÀº °æ¿ì, `_SOURCES' º¯¼ö¿¡ `configure'¿¡ ÀÇÇØ ¸¸µé¾îÁö´Â Çì´õ ÆÄÀÏÀ» Æ÷ÇÔÇؼ´Â ¾ÈµÈ´Ù; ÀÌ ÆÄÀÏÀ» ¹èÆ÷µÇ´Â °ÍÀÌ ¾Æ´Ï´Ù. Lex(`.l')¿Í Yacc(`.y') ÆÄÀÏµé ¶ÇÇÑ ¿°ÅµÉ ¼ö ÀÖ´Ù; section Yacc¿Í Lex Áö¿ø¸¦ º¸¶ó.
¸ðµç »óȲ¿¡¼ ¸ðµç ÆÄÀÏÀÌ ºôµå(build)µÇ´Â °ÍÀÌ ¾Æ´ÒÁö¶óµµ, Automake´Â
ÇÁ·Î±×·¥¿¡ µé¾î°¥ °¡´É¼ºÀÌ ÀÖ´Â ¼Ò½º ÆÄÀÏÀ¸ ¤©¸ðµÎ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù.
Á¶°Ç¿¡ µû¶ó ºôµå(build)µÇ´Â ÆÄÀÏÀº ÀûÀýÇÑ `EXTRA_'º¯¼ö¿¡ ¿°ÅµÇ¾ß
ÇÑ´Ù. ¿¹¸¦ µé¾î, `hello-linux.c'°¡ Á¶°Ç¿¡ µû¶ó¼ hello
¿¡
Æ÷ÇԵȴٸé, `Makefile.am'Àº ´ÙÀ½À» Æ÷ÇÔÇØ¾ß ÇÑ´Ù:
EXTRA_hello_SOURCES = hello-linux.c
ºñ½ÁÇÏ°Ô, ¶§·Î´Â configure½Ã¿¡ ¹«¾ùÀÌ ºôµå(build)µÉÁö °áÁ¤ÇÏ´Â °ÍÀÌ
ÁÁ´Ù. ¿¹¸¦ µé¾î, GNU cpio
´Â ƯÁ¤ »óȲ¿¡¼¸¸ mt
¿Í
rmt
¸¦ ºôµå(build)ÇÑ´Ù.
ÀÌ·± °æ¿ì, automake
´Â buildµÉ °¡´É¼ºÀÌ ÀÖ´Â ÇÁ·Î±×·¥À» ¸ðµÎ
¾Ë·ÁÁà¾ß ÇÑ´Ù. ÇÏÁö¸¸, µ¿½Ã¿¡ ¸¸µé¾îÁú `Makefile.in'Àº
configure
°¡ ¸í½ÃÇÏ´Â ÇÁ·Î±×·¥À» »ç¿ëÇϵµ·Ï ÇØ¾ß ÇÑ´Ù. ÀÌ ÀÏÀº
¿É¼ÇÀ¸·Î buildµÇ´Â ÇÁ·Î±×·¥À» EXTRA_PROGRAMS
¿¡ Àû¾îÁÖ´Â ÇÑÆí, °¢
`_PROGRAMS' Á¤ÀÇ¿¡ configure
ġȯ(substitute) °ªÀ» Àû¾îÁÖ¸é
µÈ´Ù.
configure
°¡ Á÷Á¢ ãÁö ¾Ê´Â ¶óÀ̺귯¸®¿Í ¸µÅ©ÇØ¾ß ÇÑ´Ù¸é,
LDADD
¸¦ ¾µ ¼ö ÀÖ´Ù. ÀÌ º¯¼ö´Â ¸µÄ¿ÀÇ ¸í·ÉÇà¿¡ ¾î¶²
¿É¼ÇÀÌ¶óµµ Ã·°¡ÇÏ°í ½ÍÀ»¶§ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
°¡²û, ¿©·¯°³ÀÇ ÇÁ·Î±×·¥ÀÌ ÇÑ°³ÀÇ µð·ºÅ丮¿¡¼ buildµÇ¸é¼ ¸µÅ©½Ã¿¡
ÇÊ¿äÇÑ °ÍÀÌ °°Áö ¾ÊÀ» ¼ö ÀÖ´Ù. ÀÌ °æ¿ì, global LDADD
¸¦
ÀçÁ¤ÀÇÇϱâ À§ÇØ `prog_LDADD' (PROG´Â `_PROGRAMS'
º¯¼ö ¾È¿¡ ³ªÅ¸³ª´Â ÇÁ·Î±×·¥ÀÇ À̸§ÀÌ°í, º¸Åë ¼Ò¹®Àڷθ¸ ¾²¿©Áø´Ù) º¯¼ö¸¦
»ç¿ëÇÑ´Ù. (¸¸¾à ÀÌ º¯¼ö°¡ ¾î¶² ÇÁ·Î±×·¥¿¡ ÁÖ¾îÁ³´Ù¸é ±× ÇÁ·Î±×·¥Àº
LDADD
¸¦ ½á¼ ¸µÅ©µÇÁö ¾Ê´Â´Ù.)
¿¹¸¦ µé¾î, GNU cpio¿¡¼, pax
, cpio
, ±×¸®°í mt
´Â
`libcpio.a' ¶óÀ̺귯¸®¿Í ¸µÅ©µÈ´Ù. ÇÏÁö¸¸, rmt
´Â °°Àº
µð·ºÅ丮¿¡¼ buildµÇ¸é¼, ¸µÅ©ÇÒ¶§ ±×·± °ÍÀÌ ÇÊ¿ä¾ø´Ù. ¶Ç mt
¿Í
rmt
´Â ƯÁ¤ architecture¿¡¼¸¸ buildµÈ´Ù. ¿©±â cpioÀÇ
`src/Makefile.am'ÀÌ ÀÖ´Ù (¿ä¾à):
bin_PROGRAMS = cpio pax @MT@ libexec_PROGRAMS = @RMT@ EXTRA_PROGRAMS = mt rmt LDADD = ../lib/libcpio.a @INTLLIBS@ rmt_LDADD = cpio_SOURCES = ... pax_SOURCES = ... mt_SOURCES = ... rmt_SOURCES = ...
`prog_LDADD'´Â ÇÁ·Î±×·¥¿¡ °ü°èµÈ ¸µÄ¿ ¿É¼Ç(`-l'°ú `-L'À» Á¦¿ÜÇÏ°í)À» ³Ñ°ÜÁÖ´Â µ¥´Â ºÎÀûÇÕÇÏ´Ù. ±×·¡¼ ÀÌ·± ¸ñÀûÀ¸·Î´Â `prog_LDFLAGS'¸¦ »ç¿ëÇÑ´Ù.
¶§¶§·Î ±× ÇÁ·Î±×·¥ÀÇ ÀϺΰ¡ ¾Æ´Ñ ¾î¶² ´Ù¸¥ target¿¡ ÀÇÁ¸ÇÏ´Â ÇÁ·Î±×·¥ÀÌ À¯¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô ÇÏ·Á¸é `prog_DEPENDENCIES' º¯¼ö¸¦ ¾²¸é µÈ´Ù. °¢ ÇÁ·Î±×·¥Àº ÀÌ º¯¼öÀÇ ³»¿ë¿¡ ÀÇÁ¸ÇÏ°Ô µÇÁö¸¸, ±× ÀÌ»óÀÇ Çؼ®Àº ÇÏÁö ¾Ê´Â´Ù.
`prog_DEPENDENCIES'°¡ Á¦°øµÇÁö ¾ÊÀ¸¸é, ÀÌ°ÍÀº Automake¿¡ ÀÇÇØ °áÁ¤µÈ´Ù. ÀÚµ¿À¸·Î ÁÖ¾îÁö´Â °ªÀº `prog_LDADD'ÀÇ ³»¿ë¿¡¼ ´ëºÎºÐÀÇ configure ġȯ(substitution), `-l', ±×¸®°í `-L' ¿É¼ÇÀ» »« °ÍÀÌ´Ù. ³²¾Æ ÀÖ°Ô µÇ´Â configure ġȯ(substitution)Àº `@LIBOBJS@'¿Í `@ALLOCA@'»ÓÀÌ´Ù; ÀÌ ¿É¼ÇµéÀº ¸¸µé¾îÁö°Ô µÇ´Â `prog_DEPENDENCIES'¿¡ À߸øµÈ °ªÀÌ µé¾î°¡°Ô ÇÏÁö ¾Ê´Â´Ù°í ¾Ë·ÁÁ® Àֱ⠶§¹®¿¡ ³²¾Æ Àִ´Ù.
¶óÀ̺귯¸®¸¦ buildÇÏ´Â °ÍÀº ÇÁ·Î±×·¥À» buildÇÏ´Â °Í°ú ¸¹ÀÌ ºñ½ÁÇÏ´Ù. ÀÌ
°æ¿ì, primaryÀÇ À̸§Àº `LIBRARIES'ÀÌ´Ù. ¶óÀ̺귯¸®´Â
libdir
³ª pkglibdir
¿¡ ¼³Ä¡µÉ ¼ö ÀÖ´Ù.
°¢ `_LIBRARIES' º¯¼ö´Â buildµÉ ¶óÀ̺귯¸®¸¦ ¿°ÅÇÑ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î `libcpio.a'¶ó´Â À̸§ÀÇ ¶óÀ̺귯¸®¸¦ ¸¸µé°í, ¼³Ä¡ÇÏÁö ¾ÊÀ¸·Á¸é, ´ÙÀ½°ú °°ÀÌ ¾´´Ù:
noinst_LIBRARIES = libcpio.a
¶óÀ̺귯¸®·Î µé¾î°¡°Ô µÇ´Â ¼Ò½º´Â ÇÁ·Î±×·¥¿¡¼ ÇÏ´Â °Í°ú ¸¶Âù°¡Áö·Î `_SOURCES' º¯¼ö¸¦ ÅëÇØ °áÁ¤µÈ´Ù. ¶óÀ̺귯¸®ÀÇ À̸§Àº ±Ô¹üȵȴٴ (see section ÆÄ»ýµÈ º¯¼öÀÇ ¸í¸í¹ý) °Í¿¡ À¯ÀÇÇÏÀÚ. ±×·¡¼ `liblob.a'¿¡ ´ëÇÑ `_SOURCES' º¯¼ö´Â `liblob_a_SOURCES'ÀÌÁö `liblob.a_SOURCES'°¡ ¾Æ´Ï´Ù.
`library_LIBADD' º¯¼ö¸¦ »ç¿ëÇؼ Ãß°¡ÀûÀ¸·Î ¶óÀ̺귯¸®¿¡ object¸¦
÷°¡ÇÒ ¼ö ÀÖµû. ÀÌ º¯¼ö´Â configure
¿¡ ÀÇÇØ °áÁ¤µÇ´Â object¸¦
À§ÇØ »ç¿ëµÈ´Ù. ´Ù½Ã cpioÀÇ °æ¿ì:
libcpio_a_LIBADD = @LIBOBJS@ @ALLOCA@
Automake´Â
ÀÚµ¿À¸·Î ¹èÆ÷ÆÇ¿¡ (see section ¹èÆ÷ÆÇ¿¡ µé¾î°¡´Â °Íµé) ¼Ò½º ÆÄÀÏÀ» Æ÷ÇÔÇϱâ À§ÇØ
@LIBOBJS@
¿Í @ALLOCA@
ÀÇ »ç¿ëÀ» ¿ÜÆ÷ÀûÀ¸·Î
¾Ë¾Æ³»¼, ±× Á¤º¸¿Í `configure.in'¿¡¼ ³ª¿Â LIBOBJS
ÆÄÀÏÀÇ
¸ñ·ÏÀ» È°¿ëÇÑ´Ù. ÀÌ ¼Ò½º ÆÄÀϵéÀº ÀÚµ¿À¸·Î ÀÇÁ¸¼º ÃßÀû ¹æ½Ä¿¡ Á¦¾îµÉ
°ÍÀÌ´Ù. See section ÀÚµ¿ ÀÇÁ¸¼º ÃßÀû.
@LIBOBJS@
¿Í @ALLOCA@
´Â `_LDADD'³ª `_LIBADD'
º¯¼ö¿¡°Ô Ưº°È÷ ÀÎ½ÄµÉ °ÍÀÌ´Ù.
µ¿Àû ¶óÀ̺귯¸®(shared library)¸¦ ¸¸µå´Â °ÍÀº ºñ±³Àû º¹ÀâÇÑ ÀÏÀÌ´Ù. ÀÌ·± ÀÌÀ¯·Î, GNU Libtool (see section `The Libtool Manual' in The Libtool Manual)ÀÌ Ç÷§Æû(platform)¿¡ °ü°è¾øÀÌ µ¿Àû ¶óÀ̺귯¸®(shared library)¸¦ ¸¸µé±â À§ÇØ ÀÛ¼ºµÇ¾ú´Ù.
Automake´Â `LTLIBRARIES' Áֿ亯¼ö¸¦ Á¤ÀÇÇؼ ¶óÀ̺귯¸®¸¦ ¸¸µå´Â µ¥ LibtoolÀ» ¾´´Ù. °¢ `_LTLIBRARIES' º¯¼ö´Â ¸¸µé¾î¾ß ÇÒ µ¿Àû ¶óÀ̺귯¸®(shared library)ÀÇ ¸®½ºÆ®ÀÌ´Ù. ¿¹¸¦ µé¾î, `libgettext.a'¿Í ÀÌ¿¡ »ó´ëµÇ´Â µ¿Àû ¶óÀ̺귯¸®(shared library)¸¦ ¸¸µé°í, `libdir'¿¡ ¼³Ä¡ÇÏ·Á¸é, ´ÙÀ½°ú °°ÀÌ ¾´´Ù:
lib_LTLIBRARIES = libgettext.la
µ¿Àû ¶óÀ̺귯¸®(shared library)´Â ¹Ýµå½Ã ¼³Ä¡µÇ¾ß ÇϹǷÎ, `noinst_LTLIBRARIES'¿Í `check_LTLIBRARIES'º¯¼ö´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.
°¢ ¶óÀ̺귯¸®¿¡ ´ëÇؼ, `library_LIBADD' º¯¼ö´Â µ¿Àû ¶óÀ̺귯¸®¿¡ Ãß°¡ÇÒ Ãß°¡ÀûÀÎ libtool ¿ÀºêÁ§Æ®(object)ÀÇ À̸§À» ´ã°í ÀÖ´Ù. `library_LDFLAGS' º¯¼ö´Â `-version-info'³ª `static'°ú °°Àº ±×¿Ü Ãß°¡ÇÒ libtool ¿É¼ÇÀ» ´ã°í ÀÖ´Ù.
°°Àº µð·ºÅ丮¿¡ ¼³Ä¡ÇÒ ¶óÀ̺귯¸®¿¡ ´ëÇؼ´Â, automake
´Â ÀÚµ¿À¸·Î
ÀûÀýÇÑ `-rpath' ¿É¼ÇÀ» Ãß°¡ÇÑ´Ù. ÇÏÁö¸¸, configure ½Ã¿¡ °áÁ¤Çؾß
ÇÒ (Áï EXTRA_LTLIBRARIES
¿¡ ¾ð±ÞµÇ´Â) ¶óÀ̺귯¸®¿¡ ´ëÇؼ´Â,
automake
´Â °á°úÀûÀ¸·Î ¼³Ä¡ÇÒ µð·ºÅ丮¿¡ ´ëÇؼ ¾ËÁö ¸øÇÑ´Ù; ±×·±
µð·ºÅ丮¿¡¼´Â `-rpath' ¿É¼ÇÀ» ÇØ´çµÇ´Â `_LDFLAGS' º¯¼ö¿¡ Á÷Á¢
Ãß°¡ÇØ¾ß ÇÑ´Ù.
ÀÚ¼¼ÇÑ Á¤º¸´Â See section `The Libtool Manual' in The Libtool Manual.
¶§·Î´Â ¾î¶² `Makefile' º¯¼ö°¡ Automake°¡ ÄÄÆÄÀÏÀ» À§ÇØ »ç¿ëÇÏ´Â °ÍÀÎÁö ¾Æ´Â °ÍÀÌ À¯¿ëÇÏ´Ù; ¿¹¸¦ µé¾î ¾î¶² Ưº°ÇÑ °æ¿ì¿¡¸¸ ÄÄÆÄÀÏÀ» ÇØ¾ß ÇÒÁöµµ ¸ð¸¥´Ù.
¾î¶² º¯¼ö´Â Autoconf¿¡¼ ¹°·Á¹Þ´Â °ÍÀÌ´Ù; ±×°ÍµéÀº CC
,
CFLAGS
, CPPFLAGS
, DEFS
, LDFLAGS
, ±×¸®°í
LIBS
ÀÌ´Ù.
Automake°¡ Á÷Á¢ Ãß°¡·Î Á¤ÀÇÇÏ´Â ¸î°³ º¯¼ö°¡ ÀÖ´Ù.
INCLUDES
automake
´Â ÀÌ¹Ì ÀÚµ¿À¸·Î ¸î°³ÀÇ `-I' ¿É¼ÇÀ» Ãß°¡ÇÑ´Ù. ƯÈ÷
automake
´Â `-I$(srcdir)'¿Í `config.h'°¡ µé¾î ÀÖ´Â
µð·ºÅ丮¸¦ °¡¸®Å°´Â `-I'¸¦ ¸¸µç´Ù(¸¸¾à AC_CONFIG_HEADER
³ª
AM_CONFIG_HEADER
¸¦ »ç¿ëÇß´Ù¸é).
½ÇÁ¦·Î´Â INCLUDES
´Â `-I' ¿Ü¿¡ ´Ù¸¥ cpp
¿É¼ÇÀ» ¾²°í
½ÍÀ»¶§ ¾²ÀδÙ. ¿¹¸¦ µé¾î, ÀÓÀÇÀÇ `-D' ¿É¼ÇÀ» ÄÄÆÄÀÏ·¯¿¡ ³Ñ°ÜÁÖ°í
½ÍÀ» ¶§ ¾²ÀδÙ.
COMPILE
LINK
Automake´Â Á» ƯÀÌÇÏ°Ô Yacc¿Í Lex¸¦ Áö¿øÇÑ´Ù.
Automake´Â yacc(¶Ç´Â lex)¿¡ ÀÇÇØ ¸¸µé¾îÁø `.c' ÆÄÀÏÀº ÀÔ·ÂÆÄÀÏÀÇ basenameÀ» »ç¿ëÇؼ À̸§Áö¾îÁø´Ù°í °¡Á¤ÇÑ´Ù. Áï, yacc ¼Ò½º ÆÄÀÏ `foo.y'ÀÇ °æ¿ì, automake´Â Áß°£ ÆÄÀÏÀº `foo.c'¶ó´Â À̸§(´õ ÀüÅëÀûÀÎ À̸§ÀÎ `y.tab.c'°¡ ¾Æ´Ï¶ó)À¸·Î ¸¸µé¾î ³½´Ù.
yacc ¼Ò½º ÆÄÀÏÀÇ È®ÀåÀÚ´Â `C' ȤÀº `C++' °á°ú ÆÄÀÏÀÇ È®ÀåÀÚ¸¦ °áÁ¤ÇÏ´Â µ¥ ¤¶ÀδÙ. `.y' È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏÀº `.c' ÆÄÀÏÀÌ µÈ´Ù; ¸¶Âù°¡Áö·Î, `samp.yy'´Â `.cc'°¡ µÈ´Ù; `.y++'Àº `c++'ÀÌ µÈ´Ù; `.yxx'´Â `cxx'. ¸¶Âù°¡Áö·Î, lex ¼Ò½º ÆÄÀÏÀº `C' ȤÀº `C++' ÆÄÀÏÀ» ¸¸µå´Â µ¥ ¾²ÀδÙ; `.l', `.ll', `.l++', ±×¸®°í `.lxx' È®ÀåÀÚ¸¦ ¾Ë¾Æº»´Ù.
¾î¶² `SOURCES' º¯¼ö¿¡µµ Áß°£ ÆÄÀÏ(`C' ȤÀº `C++')À» ¾ð±ÞÇÏ¸é ¾È µÈ´Ù; ¿ÀÁ÷ ¼Ò½º ÆÄÀϸ¸À» ¿°ÅÇÑ´Ù.
yacc(ȤÀº lex)°¡ ¸¸µå´Â Áß°£ ÆÄÀÏÀº ¹èÆ÷º»À» ¸¸µé¶§ Æ÷ÇԵȴÙ. ±×·¡¼, »ç¿ëÀÚ´Â yacc³ª lex¸¦ °®°í ÀÖÀ» ÇÊ¿ä°¡ ¾ø´Ù.
yacc ¼Ò½º ÆÄÀÏÀÌ ÀÖÀ¸¸é, `configure.in'Àº `YACC' º¯¼ö¸¦ Á¤ÀÇÇØ¾ß ÇÑ´Ù. ÀÌ ÀÛ¾÷Àº `AC_PROG_YACC' ¸ÅÅ©·Î¸¦ ½ÇÇà½ÃÄѼ ½±°Ô ÇÒ ¼ö ÀÖ´Ù.
ºñ½ÁÇÏ°Ô lex ¼Ò½º ÆÄÀÏÀÌ ÀÖÀ¸¸é `configure.in'Àº `LEX' º¯¼ö¸¦ Á¤ÀÇÇØ¾ß ÇÑ´Ù. ÀÌ°ÍÀ» Çϱâ À§ÇØ `AC_PROG_LEX'¸¦ ¾µ ¼ö ÀÖ´Ù. AutomakeÀÇ lex Áö¿øÀ» À§Çؼ´Â `AC_DECL_YYTEXT' ¸ÅÅ©·Îµµ »ç¿ëÇØ¾ß ÇÑ´Ù -- automake´Â `LEX_OUTPUT_ROOT'ÀÇ °ªÀ» ¾Ë ÇÊ¿ä°¡ ÀÖ´Ù.
lex ¼Ò½º ÆÄÀÏÀ» Æ÷ÇÔÇÏ´Â ¾î¶² ÇÁ·Î±×·¥À̵ç `@LEXLIB@'¿Í ¸µÅ©µÇ¾ß ÇÑ´Ù. ÀÌ ÀÛ¾÷Àº Àû´çÇÑ `LDADD' º¯¼ö¿¡ `@LEXLIB@'¸¦ ³Ö¾î¼ ÇÒ ¼ö ÀÖ´Ù.
Automake´Â ¿©·¯°³ÀÇ yacc (¶Ç´Â lex) ¼Ò½º ÆÄÀÏÀ» ÇÑ°³ÀÇ ÇÁ·Î±×·¥¿¡ Æ÷ÇÔÇÒ
¼ö ÀÖ°Ô ÇØ ÁØ´Ù. Automake´Â ¿©·¯°³ÀÇ yacc ½ÇÇà°£ÀÇ lockÀ» °ü¸®Çϱâ
À§ÇØ interlock
À̶ó´Â ÀÛÀº ÇÁ·Î±×·¥À» »ç¿ëÇÑ´Ù. yaccÀÇ Ãâ·Â
ÆÄÀÏÀ̸§Àº °íÁ¤µÇ¾î ÀÖ°í, º´·Ä·Î make¸¦ ½ÇÇàÇÒ °æ¿ì ¿©·¯ instanceÀÇ
yacc
¸¦ µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö Àֱ⠶§¹®¿¡ ÀÌ ±â´ÉÀÌ ÇÊ¿äÇÏ´Ù.
interlock
Àº automake¿Í ÇÔ²² ¹èÆ÷µÈ´Ù. ÀÌ ÇÁ·Î±×·¥Àº
`AC_CONFIG_AUX_DIR'¿¡¼ ¾ð±ÞµÈ µð·ºÅ丮¿¡ Àְųª, ȤÀº ÀÌ ¸ÅÅ©·Î°¡
`configure.in'¿¡¼ »ç¿ëµÇÁö ¾Ê¾Ò´Ù¸é ÇöÀç µð·ºÅ丮¿¡ ÀÖ¾î¾ß ÇÑ´Ù.
yacc
¿¡¼´Â, ´Ü¼øÇÑ locking °ü¸®´Â ÃæºÐÇÏÁö ¾Ê´Ù. yacc
Ãâ·ÂÀº ³»ºÎÀûÀ¸·Î Ç×»ó °°Àº symbolÀ» »ç¿ëÇÒ °ÍÀÌ°í, µÎ°³ÀÇ yacc
parser¸¦ µ¿ÀÏÇÑ ½ÇÇàÆÄÀÏ·Î ¸µÅ©ÇÒ ¼ö ¾ø´Ù.
gdb
¿¡¼ »ç¿ëÇÏ°í ÀÖ´Â ¹æ¹ýÀÎ À̸§À» °íÄ¡´Â ÇØÅ·(hack)À» ÃßõÇÑ´Ù:
#define yymaxdepth c_maxdepth #define yyparse c_parse #define yylex c_lex #define yyerror c_error #define yylval c_lval #define yychar c_char #define yydebug c_debug #define yypact c_pact #define yyr1 c_r1 #define yyr2 c_r2 #define yydef c_def #define yychk c_chk #define yypgo c_pgo #define yyact c_act #define yyexca c_exca #define yyerrflag c_errflag #define yynerrs c_nerrs #define yyps c_ps #define yypv c_pv #define yys c_s #define yy_yys c_yys #define yystate c_state #define yytmp c_tmp #define yyv c_v #define yy_yyv c_yyv #define yyval c_val #define yylloc c_lloc #define yyreds c_reds #define yytoks c_toks #define yylhs c_yylhs #define yylen c_yylen #define yydefred c_yydefred #define yydgoto c_yydgoto #define yysindex c_yysindex #define yyrindex c_yyrindex #define yygindex c_yygindex #define yytable c_yytable #define yycheck c_yycheck
°¢ define¿¡¼ `c_' Á¢µÎ¾î¸¦ ÁÁÀº´ë·Î ¹Ù²Ù¶ó. ÀÌ defineÀº
bison
, byacc
, ±×¸®°í ÀüÅëÀûÀÎ yacc
¹öÀü¿¡¼
µ¿ÀÛÇÑ´Ù. ¸¸¾à ¿©±â ¾ð±ÞµÇÁö ¾ÊÀº symbolÀ» »ç¿ëÇÏ´Â parser generator¸¦
ãÀ¸¸é, »õ·Î¿î À̸§À» ¾Ë·ÁÁÖ¸é ±×°ÍÀº ¸®½ºÆ®¿¡ Ãß°¡µÉ °ÍÀÌ´Ù.
Automake´Â C++¿¡ ´ëÇؼ ¿ÏÀüÈ÷ Áö¿øÇÏ°í, ´Ù¸¥ ¾ð¾îµé¿¡ ´ëÇؼ ±âº»ÀûÀÎ Áö¿øÀ» ÇÑ´Ù. ´Ù¸¥ ¾ð¾îµé¿¡ ´ëÇÑ Áö¿øÀº ¿ä±¸¿¡ µû¶ó¼ Çâ»óµÉ °ÍÀÌ´Ù.
C++ Äڵ带 Æ÷ÇÔÇÑ ÆÐÅ°Áö´Â `CXX' º¯¼ö¸¦ `configure.in'¿¡¼
Á¤ÀÇÇØ¾ß ÇÑ´Ù; ÀÌ ÀÛ¾÷À» Çϱâ À§ÇÑ °¡Àå °£´ÜÇÑ ¹æ¹ýÀº AC_PROG_CXX
¸ÅÅ©·Î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.
C++ ¼Ò½º ÆÄÀÏÀÌ ÀÖÀ»¶§ ¸î°³ º¯¼ö°¡ Ãß°¡·Î Á¤ÀǵȴÙ.
CXX
CXXFLAGS
CXXCOMPILE
CXXLINK
GNU Ç¥ÁØ(GNU standards)´Â ANSI C¸¦ »ç¿ëÇصµ µÈ´Ù°í ÇÏÁö¸¸, ±×·¸°Ô Çϸé, ¸î¸î ¿À·¡µÈ ÄÄÆÄÀÏ·¯(ƯÈ÷ SunOS)¿¡ ´ëÇØ È£È¯¼ºÀÌ ¶³¾îÁú °ÍÀÌ´Ù.
Automake¿¡¼´Â ±×·¯ÇÑ ±â°è¿¡¼ ÄÄÆÄÀÏÀÌ ÀϾ±â Àü¿¡ ¼Ò½º ÆÄÀÏ¿¡¼`ANSI ¹®¹ý ¾ø¾Ö±â(de-ANSI-fying)'·Î ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù.
`Makefile.am'ÀÇ º¯¼öÀÎ AUTOMAKE_OPTIONS
(section Changing Automake's Behavior) ¾È¿¡ ansi2knr
¿É¼ÇÀÌ µé¾î ÀÖ´Ù¸é
ANSI ¹®¹ýÀ» ¾ø¾Ö´Â °ÍÀ» ó¸®ÇÏ´Â ÄÚµå´Â ¸¸µé¾îÁú `Makefile.in'¿¡
µé¾î°¥ °ÍÀÌ´Ù.
ÀÌ ±â´ÉÀº ±× µð·ºÅ丮¿¡ µé¾î ÀÖ´Â °¢ C ¼Ò½º ÆÄÀÏÀÌ ANSI C·Î Ãë±ÞµÇµµ·Ï
ÇÑ´Ù. ¸¸¾à ANSI C ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù¸é, ±×°ÍÀ» »ç¿ëÇÑ´Ù. ¸¸¾à
ANSI C ÄÄÆÄÀÏ·¯°¡ ¾ø´Ù¸é, ansi2knr
ÇÁ·Î±×·¥ÀÌ ¼Ò½º ÆÄÀÏÀ» K&R C·Î
¹Ù²Ù´Â µ¥ »ç¿ëµÇ°í, ±× ´ÙÀ½¿¡ ÄÄÆÄÀϵȴÙ.
ansi2knr
ÇÁ·Î±×·¥Àº ÇÑ°¡Áö »ý°¢¸¸ ÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¼Ò½º
ÆÄÀÏÀÌ ÇÑ°¡Áö ƯÁ¤ ¹æ¹ýÀ¸·Î formatµÇ¾î ÀÖÀ» °ÍÀ̶ó°í °¡Á¤ÇÑ´Ù; ÀÚ¼¼ÇÑ
°ÍÀº ansi2knr
man page¸¦ º¸¶ó. ansi2knr
À» K&R C ¼Ò½º¿¡
´ëÇÏ¿© ½ÇÇà½ÃÅ°¸é ÄÄÆÄÀÏ ¾Ö·¯¸¦ ³¾ °ÍÀÌ´Ù.
ANSI ¹®¹ýÀ» ¾ø¾Ö´Â Áö¿øÀº ¼Ò½º ÆÄÀÏ `ansi2knr.c'¿Í
`ansi2knr.1'ÀÌ ANSI C ¼Ò½º¿Í °°Àº ÆÐÅ°Áö¿¡ ÀÖ¾î¾ß ÇÑ´Ù; ÀÌ ÆÄÀϵéÀº
Automake¿Í ÇÔ²² ¹èÆ÷µÈ´Ù. ¶ÇÇÑ ÆÐÅ°ÁöÀÇ `configure.in'Àº
AM_C_PROTOTYPES
¸ÅÅ©·Î¸¦ ½ÇÇàÇØ¾ß ÇÑ´Ù.
Automake´Â ÇöÀç ÆÐÅ°Áö ³»ÀÇ ´Ù¸¥ ÆÄÀÏ¿¡ ÀÖ´Â ansi2knr
Áö¿ø
ÆÄÀϵéÀ» ã¾Æ³»´Â °Íµµ ÇØ ÁØ´Ù. ÀÌ ±â´ÉÀº ansi2knr
¿É¼Ç¿¡ Àû´çÇÑ
µð·ºÅ丮ÀÇ »ó´ë path¸¦ ¾Õ¿¡ ºÙ¿©ÁÖ¸é µÈ´Ù. ¿¹¸¦ µé¾î ÆÐÅ°ÁöÀÇ
`src'¿Í `lib' ¼ºêµð·ºÅ丮¿¡ ANSI C Äڵ尡 ÀÖ´Ù°í °¡Á¤ÇÏÀÚ.
`ansi2knr.c'¿Í `ansi2knr.1' ÆÄÀÏÀº `lib'¿¡ ÀÖ´Ù. ±×·¯¸é
´ÙÀ½ÀÌ `src/Makefile.am'¿¡ µé¾î°¥ ¼ö ÀÖÀ» °ÍÀÌ´Ù:
AUTOMAKE_OPTIONS = ../lib/ansi2knr
¾î¶² µð·ºÅ丮 Á¢µÎ¾îµµ ÁÖ¾îÁöÁö ¾Ê´Â´Ù¸é, ÆÄÀϵéÀº ÇöÀç µð·ºÅ丮¿¡ ÀÖ´Ù°í °¡Á¤ÇÑ´Ù.
°³¹ßÀڷμ ÇÁ·ÎÁ§Æ®¿¡¼ include ÆÄÀÏÀÇ ÀÇÁ¸¼ºÀÌ ¹Ù²ð ¶§¸¶´Ù
`Makefile.in'À» °è¼Ó ¼öÁ¤ÇÏ´Â °ÍÀº ¶§·Ð °íÅ뽺·´´Ù.
automake
´Â ÀÚµ¿À¸·Î ÀÇÁ¸¼º(dependency) º¯È¸¦ ÃßôÇÏ´Â ¹æ¹ýÀ»
Á¦°øÇÏ°í, ¸¸µé¾îÁú `Makefile.in'¿¡ ÀÇÁ¸¼º(dependency)À» ³Ö¾î
¹èÆ÷ÇÑ´Ù.
ÇöÀç ÀÌ Áö¿øÀº GNU make
¿Í gcc
ÀÇ »ç¿ëÀ» ÇÊ¿ä·Î ÇÑ´Ù.
ÃæºÐÇÑ ¿ä±¸°¡ ÀÖ´Ù¸é, ¹Ì·¡¿¡´Â ÀÇÁ¸¼ºÀ» ¸¸µå´Â ¶Ç´Ù¸¥ ÇÁ·Î±×·¥À»
Á¦°øÇÒ ¼ö ÀÖÀ»Áö ¸ð¸¥´Ù. ÇÑÆí, ÀÌ ¸ðµå´Â C ÇÁ·Î±×·¥À̳ª ¶óÀ̺귯¸®°¡
Çϳª¶óµµ Á¤ÀǵǾî ÀÖ´Ù¸é µ¿ÀÛÇϱ⠶§¹®¿¡, GNU make°¡ ¾Æ´Ñ °æ¿ì¿¡´Â
`Must be a separator' ¾Ö·¯°¡ ³¯ ¼öµµ ÀÖ´Ù.
¹èÆ÷º»À» ¸¸µé±â·Î °áÁ¤ÇßÀ» ¶§, dist
target˼
automake
¸¦ `--include-deps'¿Í ´Ù¸¥ ¿É¼Çµé°ú ÇÔ²² ´Ù½Ã ½ÇÇàÇÒ
°ÍÀÌ´Ù. ÀÌ°ÍÀº Àü¿¡ ¸¸µé¾îÁø ÀÇÁ¸¼º(dependency)ÀÌ ¸¸µé¾îÁú
`Makefile.in'¿¡ µé¾î°¡µµ·Ï ÇÑ´Ù. Áï ¹èÆ÷ÆÇÀ¸·Î µé¾î°¡µµ·Ï ÇÑ´Ù.
ÀÌ °úÁ¤Àº ¹èÆ÷º»À» ¹Þ´Â »ç¶÷ÀÌ GNU make
¸¦ »ç¿ëÇÒ ÇÊ¿ä°¡ ¾ø°í,
gcc
°¡ ¾Ö·¯¸¦ ³»Áö ¾Êµµ·Ï Çϱâ À§Çؼ, ÀÇÁ¸¼º(dependency)À» ¸¸µå´Â
Äڵ带 Æ÷ÇÔÇÏÁö ¾Êµµ·Ï ÇÑ´Ù.
`Makefile.in'¿¡ Ãß°¡µÇ¾úÀ» ¶§, Ãß°¡µÈ ÀÇÁ¸¼ºÀº ½Ã½ºÅÛ¿¡ µû¸¥
ÀÇÁ¸¼ºÀº ¸ðµÎ ÀÚµ¿À¸·Î Áö¿öÁø »óÅÂÀÌ´Ù. ÀÌ °úÁ¤Àº
`OMIT_DEPENDENCIES'¿¡ ÆÄÀÏÀ» ¿°ÅÇÔÀ¸·Î½á °¡´ÉÇÏ´Ù.
¿¹¸¦ µé¾î ½Ã½ºÅÛ Çì´õ ÆÄÀÏ¿¡ ´ëÇÑ ÂüÁ¶´Â automake
¿¡ ÀÇÇØ
Áö¿öÁø´Ù. ¶§·Î´Â ƯÁ¤ Çì´õ ÆÄÀÏÀÌ Áö¿ì´Â °ÍÀ» ¸í½ÃÇÏ´Â °ÍÀÌ À¯¿ëÇÏ´Ù.
¿¹¸¦ µé¾î `configure.in'ÀÌ `AM_WITH_REGEX'¸¦ »ç¿ëÇÑ´Ù¸é,
`rx.h'³ª `regex.h'¿¡ ´ëÇÑ ÀÇÁ¸¼ºÀº Áö¿öÁú °ÍÀÌ´Ù. ¿Ö³ÄÇϸé
»ç¿ëÀÚ°¡ ÆÐÅ°Áö¸¦ configureÇÒ ¶§±îÁö´Â ¸Â´ÂÁö ¾Ë ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.
»ç½Ç, automake
´Â ÀÌ Æ¯º°ÇÑ °æ¿ì¿¡ ´ëÇØ Ã³¸®ÇÒ ¼ö ÀÖÀ» Á¤µµ·Î
¿µ¸®ÇÏ´Ù. `AM_GNU_GETTEXT'°¡ ¾²À̸é ÀÚµ¿À¸·Î `libintl.h'¸¦ »©
Áֱ⵵ ÇÒ °ÍÀÌ´Ù.
ÀÚµ¿ ÀÇÁ¸¼º ÃßÀûÀº no-dependencies
¸¦ AUTOMAKE_OPTIONS
º¯¼ö¿¡ ³Ö¾î¼ ¾ø¾Ù ¼ö ÀÖ´Ù.
make dist
¿¡ ÀÇÇØ ¸¸µé¾îÁø ¹èÆ÷º»À» Ç®°í, ÀÇÁ¸¼º ÃßÀû Äڵ带 ´Ù½Ã
»ç¿ëÇÏ°í ½Í´Ù¸é, ´Ü¼øÈ÷ automake
¸¦ ´Ù½Ã ½ÇÇàÇÏ¸é µÈ´Ù.
½ÇÁ¦·Î »ç¿ëµÇ´Â ÀÇÁ¸¼º ÆÄÀÏÀº build µð·ºÅ丮 ¹Ø¿¡ `.deps'¶ó´Â À̸§ÀÇ ¼ºêµð·ºÅ丮 ¾È¿¡ ³Ö¾îÁø´Ù. ÀÌ ÀÇÁ¸¼ºÀº machine¿¡ µû¶ó ´Ù¸£´Ù. ±×·¸°Ô ÇÏ°í ½Í´Ù¸é, ÀÌ ÆÄÀϵéÀ» Áö¿öµµ ÁÁ´Ù; ÀÌ ÆÄÀϵéÀº ´ÙÀ½ build¿¡¼ ÀÚµ¿À¸·Î ´Ù½Ã ¸¸µé¾î Áú °ÍÀÌ´Ù.
Go to the first, previous, next, last section, table of contents.