Go to the first, previous, next, last section, table of contents.


ÇÁ·Î±×·¥°ú ¶óÀ̺귯¸® buildÇϱâ

Automake ±â´ÉÀÇ ¸¹Àº ºÎºÐÀº C ÇÁ·Î±×·¥°ú ¶óÀ̺귯¸®¸¦ ½±°Ô ¸¸µé ¼ö ÀÖµµ·Ï Çϱâ À§ÇÑ °ÍÀÌ´Ù.

ÇÁ·Î±×·¥À» buildÇϱâ

(¶óÀ̺귯¸®¿¡ ´ëÁ¶µÇ¾î) ÇÁ·Î±×·¥À¸·Î ºôµåµÇ´Â ¼Ò½º°¡ µé¾î ÀÖ´Â µð·ºÅ丮¿¡¼­, `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ÇÏ´Â °ÍÀº ÇÁ·Î±×·¥À» 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@

LIBOBJS and ALLOCAÀÇ Æ¯º° ó¸®

Automake´Â ÀÚµ¿À¸·Î ¹èÆ÷ÆÇ¿¡ (see section ¹èÆ÷ÆÇ¿¡ µé¾î°¡´Â °Íµé) ¼Ò½º ÆÄÀÏÀ» Æ÷ÇÔÇϱâ À§ÇØ @LIBOBJS@¿Í @ALLOCA@ÀÇ »ç¿ëÀ» ¿ÜÆ÷ÀûÀ¸·Î ¾Ë¾Æ³»¼­, ±× Á¤º¸¿Í `configure.in'¿¡¼­ ³ª¿Â LIBOBJS ÆÄÀÏÀÇ ¸ñ·ÏÀ» È°¿ëÇÑ´Ù. ÀÌ ¼Ò½º ÆÄÀϵéÀº ÀÚµ¿À¸·Î ÀÇÁ¸¼º ÃßÀû ¹æ½Ä¿¡ Á¦¾îµÉ °ÍÀÌ´Ù. See section ÀÚµ¿ ÀÇÁ¸¼º ÃßÀû.

@LIBOBJS@¿Í @ALLOCA@´Â `_LDADD'³ª `_LIBADD' º¯¼ö¿¡°Ô Ưº°È÷ ÀÎ½ÄµÉ °ÍÀÌ´Ù.

µ¿Àû ¶óÀ̺귯¸®(shared library) ¸¸µé±â

µ¿Àû ¶óÀ̺귯¸®(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.

ÇÁ·Î±×·¥À» buildÇÒ¶§ ¾²ÀÌ´Â º¯¼öµé

¶§·Î´Â ¾î¶² `Makefile' º¯¼ö°¡ Automake°¡ ÄÄÆÄÀÏÀ» À§ÇØ »ç¿ëÇÏ´Â °ÍÀÎÁö ¾Æ´Â °ÍÀÌ À¯¿ëÇÏ´Ù; ¿¹¸¦ µé¾î ¾î¶² Ưº°ÇÑ °æ¿ì¿¡¸¸ ÄÄÆÄÀÏÀ» ÇØ¾ß ÇÒÁöµµ ¸ð¸¥´Ù.

¾î¶² º¯¼ö´Â Autoconf¿¡¼­ ¹°·Á¹Þ´Â °ÍÀÌ´Ù; ±×°ÍµéÀº CC, CFLAGS, CPPFLAGS, DEFS, LDFLAGS, ±×¸®°í LIBSÀÌ´Ù.

Automake°¡ Á÷Á¢ Ãß°¡·Î Á¤ÀÇÇÏ´Â ¸î°³ º¯¼ö°¡ ÀÖ´Ù.

INCLUDES
`-I' ¿É¼ÇµéÀÇ ¸®½ºÆ®ÀÌ´Ù. ÀÌ º¯¼ö´Â Ưº°È÷ µé¿©´Ùº¸°í ½ÍÀº µð·ºÅ丮°¡ ÀÖÀ¸¸é `Makefile.am'¿¡ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. automake´Â ÀÌ¹Ì ÀÚµ¿À¸·Î ¸î°³ÀÇ `-I' ¿É¼ÇÀ» Ãß°¡ÇÑ´Ù. ƯÈ÷ automake´Â `-I$(srcdir)'¿Í `config.h'°¡ µé¾î ÀÖ´Â µð·ºÅ丮¸¦ °¡¸®Å°´Â `-I'¸¦ ¸¸µç´Ù(¸¸¾à AC_CONFIG_HEADER³ª AM_CONFIG_HEADER¸¦ »ç¿ëÇß´Ù¸é). ½ÇÁ¦·Î´Â INCLUDES´Â `-I' ¿Ü¿¡ ´Ù¸¥ cpp ¿É¼ÇÀ» ¾²°í ½ÍÀ»¶§ ¾²ÀδÙ. ¿¹¸¦ µé¾î, ÀÓÀÇÀÇ `-D' ¿É¼ÇÀ» ÄÄÆÄÀÏ·¯¿¡ ³Ñ°ÜÁÖ°í ½ÍÀ» ¶§ ¾²ÀδÙ.
COMPILE
ÀÌ º¯¼ö´Â C ¼Ò½º ÆÄÀÏÀ» ÄÄÆÄÀÏÇÒ¶§ ½ÇÁ¦·Î »ç¿ëµÉ ¸í·ÉÀÌ´Ù. ÆÄÀÏÀ̸§Àº ÀÌ ¿ÏÀüÇÑ ¸í·ÉÇà µÚ¿¡ ºÙ¿©Áø´Ù.
LINK
ÀÌ°ÍÀº ½ÇÁ¦ C ÇÁ·Î±×·¥À» ¸µÅ©ÇÒ¶§ ¾²ÀÌ´Â ¸í·ÉÀÌ´Ù.

Yacc¿Í Lex Áö¿ø

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¸¦ ãÀ¸¸é, »õ·Î¿î À̸§À» ¾Ë·ÁÁÖ¸é ±×°ÍÀº ¸®½ºÆ®¿¡ Ãß°¡µÉ °ÍÀÌ´Ù.

C++°ú ±×¿Ü ¾ð¾îµé

Automake´Â C++¿¡ ´ëÇؼ­ ¿ÏÀüÈ÷ Áö¿øÇÏ°í, ´Ù¸¥ ¾ð¾îµé¿¡ ´ëÇؼ­ ±âº»ÀûÀÎ Áö¿øÀ» ÇÑ´Ù. ´Ù¸¥ ¾ð¾îµé¿¡ ´ëÇÑ Áö¿øÀº ¿ä±¸¿¡ µû¶ó¼­ Çâ»óµÉ °ÍÀÌ´Ù.

C++ Äڵ带 Æ÷ÇÔÇÑ ÆÐÅ°Áö´Â `CXX' º¯¼ö¸¦ `configure.in'¿¡¼­ Á¤ÀÇÇØ¾ß ÇÑ´Ù; ÀÌ ÀÛ¾÷À» Çϱâ À§ÇÑ °¡Àå °£´ÜÇÑ ¹æ¹ýÀº AC_PROG_CXX ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.

C++ ¼Ò½º ÆÄÀÏÀÌ ÀÖÀ»¶§ ¸î°³ º¯¼ö°¡ Ãß°¡·Î Á¤ÀǵȴÙ.

CXX
C++ ÄÄÆÄÀÏ·¯ÀÇ À̸§.
CXXFLAGS
C++ ÄÄÆÄÀÏ·¯¿¡ ºÙÀ» flag.
CXXCOMPILE
¸í·ÉÀº ½ÇÁ¦·Î C++ ¼Ò½º ÆÄÀÏÀ» ÄÄÆÄÀÏÇÒ ¶§ ¾²ÀδÙ. ¿ÏÀüÇÑ ¸í·É ÇàÀ» ¸¸µé±â À§ÇØ ÆÄÀÏ À̸§ÀÌ µÚ¿¡ ºÙ¿©Áø´Ù.
CXXLINK
ÀÌ ¸í·ÉÀº ½ÇÁ¦·Î C++ ÇÁ·Î±×·¥À» ¸µÅ©ÇÒ ¶§ ¾²ÀδÙ.

ÀÚµ¿ ANSI¹®¹ý ¾ø¾Ö±â

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.