AUTOTOOLS Howto
½ÂÀ±
ÀÌ
INZEN
sylee (at) inzen.com
$Date $
$Revision : $
2002
Copyright
ÀÌ ¹®¼´Â GNU Free
Documentation License ¹öÀü 1.1 ȤÀº ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î Àç´Ü¿¡¼
¹ßÇàÇÑ ÀÌÈÄ ÆÇÀÇ ±ÔÁ¤¿¡ µû¸£¸ç ÀúÀ۱ǿ¡ ´ëÇÑ º» »çÇ×ÀÌ ¸í½ÃµÇ´Â ÇÑ
¾î¶°ÇÑ Á¤º¸ ¸Åü¿¡ ÀÇÇÑ º»¹®ÀÇ ÀüÀ糪 ¹ßÃéµµ ¹«»óÀ¸·Î Çã¿ëµË´Ï´Ù.
1.01
2002³â 5¿ù 7ÀÏ
sylee
µÑ°¹öÁ¯
autoconf, automake »ç¿ë¿¡ ´ëÇÑ ¼Ò°³
autotools requirement
ÇöÀç contents ¹öÁ¯
autoconf 2.53
automake 1.6
¿¹Á¯ autoconf ¿¡¼´Â ÀԷ°ªÀ¸·Î configure.in À» »ç¿ëÇÏ¿´À¸³ª .in Àº configure ÀÇ ÀԷ°ªÀ¸·Î »ç¿ëµÇ°í Àֱ⶧¹®¿¡ ¿ÀÇØ¸¦ ÇÇÇϱâ À§ÇØ ÇöÀç´Â
configure.ac¸¦ »ç¿ëÇÏ°Ô µÇ¾ú´Ù.
ÁÖ·Î *.in ÆÄÀϵéÀº configureÀÇ ÀԷ°ªÀ¸·Î Ãë±ÞµÇ°í ÀÖÀ¸¸ç, ÀÌ ÆÄÀϵéÀÌ configure
°úÁ¤À» °ÅÃļ ½ÇÁ¦ ¿øÇÏ´Â ÆÄÀÏÀÌ µÈ´Ù. ¿¹¸¦ µé¾î script.in À̶ó´Â ÆÄÀÏÀº configre ¸¦ °ÅÃļ script ¶ó´Â ÆÄÀÏÀÌ µÉ¼öÀÖ´Ù.
µû¶ó¼ À̵é°ú configure.in À» ±¸ºÐÇϱâ À§ÇØ ÇöÀç´Â configure.ac ¶ó°í
ºÎ¸£°Ô µÇ¾ú´Ù.
°³¿ä
1. configure.ac ¿¡ Makefile ÀÌ ÇÊ¿ä·Î ÇÏ´Â »çÇ×µéÀ» ±â·ÏÇÑ´Ù.
2. Makefile.am ¿¡ ÀÌµé °¡º¯¼ö¸¦ »ç¿ëÇÏ¿© Makefile ÀÇ ÃʾÈÀ» ÀÛ¼ºÇÑ´Ù.
3. configure ½ÇÇà½Ã¿¡ configure.ac ¿¡ ÁöÁ¤ÇÑ Ç׸ñµéÀÌ check µÇ¸é¼
Makefile.am ¿¡¼ ÇÊ¿äÇÑ Á¤º¸µéÀÌ À¯È¿ÇÑ °ªµé·Î ġȯµÈ´Ù.
4. Makefile.am ÀÌ À¯È¿ÇÑ °ªµéÀ» °¡Áö¸é¼ Makefile ÀÌ µÈ´Ù.
configure.ac
autoconf, automake ÀÇ ÀԷ°ª
autoconf ´Â À̸¦ ¹Þ¾Æ¼ configure ÆÄÀÏÀ» ¸¸µç´Ù.
automake ´Â À̸¦ makefile.am °ú ÇÔ²² ¹Þ¾Æ makefile.in À» ¸¸µç´Ù.
º¸Åë ÀÌ¹Ì ÁöÁ¤µÈ macro ¸¦ »ç¿ëÇÏ¿© ¿øÇÏ´Â Á¤º¸¸¦ ¾ò°Å³ª ¼³Á¤ÇÒ¼öÀÖ´Ù.
¿¹
AC_CANONICAL_SYSTEM : ÇöÀç ½Ã½ºÅÛ¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Á®¿Â´Ù.
AC_PROG_CC : cc °¡ »ç¿ë°¡´ÉÇÑÁö¸¦ check
AC_CHECK_HEADERS : ÁöÁ¤ÇÏ´Â header file µéÀÌ ½Ã½ºÅÛ¿¡ ÀÖ´ÂÁö °Ë»çÇÑ´Ù.
HAVE_NAME_H ¸¦ ¸¸µé¾îÁØ´Ù.
AC_TYPE_ : ÁöÁ¤ÇÑ type definition À» È®ÀÎÇÑ´Ù.
AC_SUBST : configure.ac ¿¡¼ »ç¿ëÇÑ º¯¼öµéÀÌ configure ½Ã
*.in ÆÄÀÏ¿¡ ÁöÁ¤ÇÑ º¯¼ö¸¦ ã¾Æ À¯È¿°ªÀ» ³Ö¾îÁØ´Ù.
AC_CONFIG_FILES : »ý¼ºµÉ ÆÄÀϵéÀ» ÁöÁ¤ÇÑ´Ù. ÈçÈ÷ Makefile.
Makefile.am
automake ÀÇ ÀԷ°ª
±âº»ÀûÀÎ Makefile ÀÇ Æ²À» Áö´Ï°í ÀÖÁö¸¸,
configure ¿¡ µû¶ó °áÁ¤µÇ´Â º¯¼öµéÀ» »ç¿ëÇϰí ÀÖ´Ù.
Makefile.am Àº ÇØ´ç ¼Ò½º¸¦ ÄÄÆÄÀÏ ÇϰíÀÚ ÇÏ´Â
À§Ä¡¸é ¾îµðµç ³õÀÌ°Ô µÈ´Ù.
°¡Àå »óÀ§ directory ÀÇ Makefile.am ¿¡´Â ÄÄÆÄÀÏÇÒ
ÇÏÀ§ directory ¸¦ Á¤ÇÏ°Ô µÈ´Ù.
configrure.ac ¿¡¼ Á¤Àǵǰí configure ¸¦ ÅëÇØ
À¯È¿°ªµéÀ» °¡Áö°Ô µÇ´Â º¯¼ö¸¦ °¡Á®¿À±â À§ÇØ @variable@ À» »ç¿ëÇÑ´Ù.
_PROGRAMS, _SCRIPTS, _SOURCES µî ÁöÁ¤µÈ primary µéÀÌ ÀÖ°í ¾Õ¿¡ ÀνºÅçµÉ
À§Ä¡³ª ÇÁ·Î±×·¥¸í, ÇÁ·Î±×·¥ÀÇ ¼Ò½ºµîÀ» ÁöÁ¤ÇÏ°Ô µÇ¾îÀÖ´Ù.
¿¹
hello.c ÀÇ Makefile.am
PFLAG = @PFLAG@ : configure ¸¦ ÅëÇØ ¾Ë¾Æ³½ °ª °¡Á®¿È
bin_PROGRAMS = world : ÄÄÆÄÀÏÈÄÀÇ ÇÁ·Î±×·¡¸í ÁöÁ¤
world_SOURCES = hello.c : ÇØ´ç ÇÁ·Î±×·¥ÀÇ ¼Ò½ºÁöÁ¤
AM_CFLAGS = $(PFLAG) : ÄÄÆÄÀϽÃÀÇ flag ÁöÁ¤ macro
how it works
¾Æ·¡ ¼ø¼·Î ÁøÇàµÈ´Ù.
aclocal : configure.ac --> aclocal.m4
autoheader : configure.ac + aclocal.m4 --> config.h.in
autoconf : configure.ac + aclocal.m4 --> configure
automake : configure.ac + aclocal.m4 + Makefile.am --> Makefile.in
configure : Makefile.in --> Makefile
autotools input/output diagram
Âü°í
autoconf,automake ¸¦ ½ÇÇàÇϱâ Àü¿¡ À̵éÀ» º¸Á¶ÇÏ´Â ¿ªÇÒÀ» ¼öÇàÇÒ ¼ö ÀÖ´Â °ÍÀ¸·Î aclocal, autoheader, autoscanÀÌ ÀÖ´Ù.
aclocal
configure.ac ¿¡¼ ÁöÁ¤ÇÏ´Â macro ¿¡ ´ëÇÑ º¸Á¶¿ªÇÒÀ» ÇÑ´Ù.
±âº»ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â macro ¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù.
autoheader
config.h.in À» ¸¸µé°í ÀÌ´Â ÈÄ¿¡ config.h °¡ µÈ´Ù.
configure.ac ¿¡¼ ÁöÁ¤µÈ È®ÀÎ »çÇ׵鿡 ´ëÇÑ Á¤º¸¸¦
config.h ¿¡ ³²±â°Ô µÈ´Ù.¿¹¸¦ µé¾î dirent.h ¶ó´Â header file ÀÌ ÀÖ´ÂÁö
¾ø´ÂÁö¸¦ AC_CHECK_HEADERS ¸¦ °Ë»çÇß´Ù¸é ÀÌ´Â config.h ¿¡
#difine HAVE_DIRENT_H 1 ·Î Á¤ÀǵȴÙ.
config.h ´Â configure Á¤º¸¿¡ ÀÇÁ¸ÇÏ´Â ÇÔ¼ö³ª header,
º¯¼ö¸¦ ¾²´Â °÷¿¡´Â ´Â include µÇ¾î¾ß ÇÑ´Ù. À̸¦ ÅëÇØ HAVE_NAME macro
¸¦ ½á¼ »óȲ¿¡ ¸Â´Â coding À» ÇØµÒÀ¸·Î½á portable ÇÑ
code ¸¦ ¸¸µé¼öÀְԵȴÙ.
autoscan
configure.ac ÀÇ ÃʾÈÀ̶ó ÇÒ¼öÀÖ´Â configur.scan À» ¸¸µé¾î ÁØ´Ù. configure.ac °¡ configure ¸¦ ¸¸µé¾î¼ ÇÊ¿äÇÑ Á¤º¸¸¦ check ÇÑ´Ù°í ÇÒ¶§ ¸ðµç »çÇ×À» °ÅÀÇ´Ù check ÇØÁÖ´Â configure.scan Àº ¿ìÈ¿ÇÒ¼öÀÖÀ¸³ª ½ÇÁ¦·Î´Â ÇÊ¿äÇÑ ±â´É¸¸À» °¡Áö´Â configure.ac ¸¦ Á÷Á¢ÀÛ¼ºÇÏ´Â °ÍÀÌ ÁÁ´Ù°í »ý°¢µÈ´Ù. configure.scan Àº ³Ê¹« º¹ÀâÇÏ´Ù.´õ±º´Ù³ª 100% ½Å·Ú °¡´ÉÇÏ´Ù°í »ý°¢µÇÁö ¾Ê°íÀÖ´Ù.
°£´ÜÇÑ ¿¹Á¦ - minimal project
ÀÛÀº ¿¹Á¦¸¦ ÅëÇØ¼ autotool À» »ç¿ëÇÏ´Â ¹æ¹ýÀ» º¸À̰ڽÀ´Ï´Ù.
ÈçÈ÷ °¡Àå ÀÛÀº ¿¹·Î hello.c ¸¦ autotool À» ÀÌ¿ëÇÏ¿© ÄÄÆÄÀÏÇϰí install
ÇÏ´Â ¿¹¸¦ ¸¹ÀÌ µé¾îº¸À̰í Àִµ¥ ¿©±â¼´Â À̺¸´Ù Á¶±Ý ´õ autoconf automake ÀÇ
´É·ÂÀ» ¹ßÈÖÇÒ ¼ö ÀÖ´Â ¿¹¸¦ µé¾î º¸À̰ڽÀ´Ï´Ù.
ÈçÈ÷ open source project ¸¦ ÇÒ¶§ ÇöÀç install ÇϰíÀÚ ÇÏ´Â machine ¿¡
»ó°ü¾øÀÌ configure, make, make install À» ÅëÇØ¼ °£´ÜÇÏ°Ô ÇÁ·Î±×·¥À» install
ÇÒ¼ö ÀÖ¾ú´Âµ¥ ¿©±â¼´Â À̸¦ °£´ÜÈ÷ ±¸ÇöÇØº¸°íÀÚ ÇÕ´Ï´Ù.´õ±º´Ù³ª project ÁøÇà»ó °¡Àå ±âº»ÀûÀ¸·Î ÇÊ¿äÇÑ ±â´ÉÀÔ´Ï´Ù.
°£´ÜÈ÷ Çϱâ À§ÇØ solaris ¿Í linux ¿¡ ´ëÇØ¼¸¸ º¸À̰ڽÀ´Ï´Ù.solaris ¿¡¼ ½ÇÇàµÉ ÆÄÀϰú linux ¿¡¼ ½ÇÇàµÉ ÆÄÀÏÀÌ ÇÊ¿äÇÕ´Ï´Ù. ¹°·Ð
°°Àº ±â´ÉÀ» ÇÏ´Â ÆÄÀÏ·Î °°Àº À̸§À» »ç¿ëÇÏ¿©µµ »ó°ü¾ø½À´Ï´Ù.
À̵éÀÌ ³õÀÌ°Ô µÉ Àå¼Ò¿Í À̵éÀ» °¡Áö°í ¿øÇÏ´Â ÀÛ¾÷À» ¼öÇàÇÏ°Ô µÉ autotools °ü·Ã ÆÄÀϵéÀÌ ³õÀÌ°Ô µÉ À§Ä¡¸¦ ¾Æ·¡¿¡¼ º¸À̵µ·Ï ÇϰڽÀ´Ï´Ù.
¼Ò½ºÀÇ À§Ä¡
¼Ò½ºµé(solaris ¿¡¼ ½ÇÇàµÉ ÆÄÀÏÀº solaris.c ¶ó Çϰí linux ¿¡¼ ½ÇÇàµÉ ÆÄÀÏÀ»
linux.c ¶ó°í ÇÏÀÚ.) À» ¹èÄ¡ ÇÒ¶§´Â ¿î¿µÃ¼Á¦ º°·Î directory ¸¦ ¸¸µé¾î¼ °ü¸®ÇÏ´Â °ÍÀÌ ÁÁ´Ù.(ÇöÀç °¡Àå Áß¿äÇÑ ±¸ºÐ¿ä¼Ò´Â ¿î¿µÃ¼Á¦º°·Î build °¡ ÀÌ·ç¾îÁö°Ô ÇÏ´Â °ÍÀ̱⠶§¹®À̱⵵ ÇÏ´Ù.) solaris.c ´Â solaris directory ¿¡ linux.c ´Â linux directory ¿¡ º¸°üÇÑ´Ù.
. project directory
./solaris/solaris.c
./linux/linux.c
project directory ¿¡¼ °¢°¢ÀÇ program source µéÀÌ À§Ä¡ÇÒ¼ö Àִ°÷Àº ¹Ù·Î Çϳª ¾Æ·¡ÀÇ dirctory ±îÁö ÀÌ´Ù. Áï depth 1 ÀÇ directory ¸¸ Çã¿ëµÇ¸ç ±× ÀÌ»óÀÇ ±íÀ̸¦ °¡Áö´Â directory ¾È¿¡ ÀÖ´Â ¼Ò½º¿¡ ´ëÇØ¼´Â configure ·Î Makefile À» ¸¸µé¼ö ¾ø¾î ½ÇÁ¦·Î´Â autoconf, automake ¸¦ ÀÌ¿ëÇϱâ À§Çؼ´Â °¢ ¼Ò½ºµéÀº depth 1 ÀÇ directory ¿¡¸¸ À§Ä¡ÇØ¾ß ÇÑ´Ù. ÀÌ ¹®Á¦´Â automake 1.4 ¸¦ »ç¿ëÇÒ °æ¿ì °í·ÁµÇ¾î¾ß Çϸç
1.5 ÀÌÈÄÀÇ ¹öÁ¯¿¡¼´Â ÀÌ ¹®Á¦°¡ ÇØ°áµÇ¾ú´Ù. 1.5 ÀÌ»óÀÇ automake ¸¦ »ç¿ëÇϰí ÀÖ´Ù¸é subdirectory ¿¡ À§Ä¡ÇÑ ¼Ò½º¿¡ ´ëÇØ¼µµ makefileÀ» ¸¸µé¼ö ÀÖ°í subdirectory ÀÇ ÆÄÀÏÀ» »óÀ§ directory ¿¡¼ ºÒ·¯¿Í »ç¿ë ÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù.
autotools ÀÔ·Â ÈÀϵéÀÇ À§Ä¡
autoconf ÀÇ ÀÔ·ÂÈÀÏÀÎ configure.ac ´Â project directory ¿¡ À§Ä¡Çϵµ·Ï ÇÑ´Ù. Áï °¡Àå »óÀ§ directry ¿¡ À§Ä¡Çϵµ·Ï Çϰí automake ÀÇ ÀÔ·ÂÆÄÀÏÀÌ¸é¼ configure ÀÇ ÀԷ°ªÀÌ µÉ Makefile.am Àº °¢°¢ÀÇ ¼Ò½º°¡ À§Ä¡ÇÑ °÷¿¡ ³õµµ·Ï ÇÑ´Ù. ÀÌ Makefile.am µéÀÌ °¢ ¼Ò½º¿¡ ´ëÇÑ Makefile ÀÌ µÈ´Ù°í »ý°¢ÇÒ¶§ ÀÌ À§Ä¡¿¡ ´ëÇÑ À̰ßÀº ¾øÀ»°ÍÀÌ´Ù.
. project directory
./configure.ac
./Makefile.am
./solaris/solaris.c
./solaris/Makefile.am
./linux/linux.c
./linux/Makefile.am
ÀÌÁ¦ °¢ directory ¿¡ À§Ä¡ÇÑ configure.ac, Makefile.am ÀÌ ¾î¶»°Ô ÀÛµ¿ÇÏ´Â Áö »ìÆìº¸ÀÚ.
ÃÖ»óÀ§ directory ÀÇ Makefile.am ÀÇ ¿ªÇÒ
ÃÖ»óÀ§ directoryÀÇ Makefile.am Àº configure ½Ã build ÇÒ directory ¸¦
ÆÇ´ÜÇÑ´Ù. SUBDIRS ¶ó´Â º¯¼ö¸¦ °¡Áö°í ÀÖÀ¸¸ç ¿©±â¿¡ ÁöÁ¤µÈ directory ¿¡ ´ëÇØ
Makefile.am À» °¡Áö°í Makefile À» ¸¸µé°Ô µÈ´Ù. ¿ì¸®´Â configure °á°ú¿¡ µû¶ó
½Ã½ºÅÛÀÌ solaris ÀÎÁö linux ÀÎÁö¸¦ ÆÇ´ÜÇÏ¿©, solaris directory ¸¦ build ÇÒ °ÍÀÎ
Áö linux directory ¸¦ build ÇÒ °ÍÀÎÁö¸¦ Á¤ÇØ¾ß ÇÑ´Ù.Áï ÀÌ SUBDIRS ´Â configure
½Ã¿¡¾ß ¾Ë ¼ö ÀÖ´Â °ªÀ̹ǷΠÀÏ´Ü Àû´çÇÑ º¯¼ö·Î µÎ°í configure ½Ã À¯È¿ÇÑ °ªÀ¸·Î
ġȯµÇµµ·Ï ÇØ¾ßÇÑ´Ù.
configure ½Ã build directory ¸¦ °áÁ¤Çϵµ·Ï Çϸç ÀÌ directory ÀÇ °ªÀ» DIRS ¶ó´Â º¯¼ö¿¡ ÀúÀåÇϵµ·Ï Çϰí, ÃÖ»óÀÇ Makefile.am ¿¡¼´Â ÀÌ °ªÀ» °¡Á®´Ù ¾²±â À§ÇØ ´ÙÀ½°ú °°ÀÌ ¾²¸é µÈ´Ù.
SUBDIRS=@DIRS@
ÀÌÁ¦ configure ¿¡¼ ÀÌ DIRS °ªÀ» ¾î¶»°Ô °áÁ¤Çϰí Makefile.am ¿¡
³Ñ°ÜÁÖ´ÂÁö º¸µµ·Ï ÇÑ´Ù.
configure.ac ÀÇ ¿ªÇÒ
configure½Ã¿¡ ¸¹Àº Á¤º¸¸¦ ¾ò¾î¾ß Çϸç À̸¦ ¹ÙÅÁÀ¸·Î MakefileÀÌ ¸¸µé¾î Áø´Ù°í ÇÒ¶§ configure ½Ã¿¡ check ÇØ¾ß ÇҰ͵éÀ» ¹Ì¸® Á¤ÇØÁÖ´Â configure.ac ÀÇ ¿ªÇÒÀÌ
autotools »ç¿ëÀÇ È¿¿ë¼ºÀ» °áÁ¤ÇÑ´Ù°í ÇÒ¼öµµ ÀÖ´Ù. °¢°¢ÀÇ check »çÇ×µéÀº macro
·Î Á¤ÀǵǾî ÀÖÀ¸¸ç ±×¿¡ ´ëÇØ¼´Â ÇÊ¿äÇÒ°æ¿ì¸¶´Ù Çϳª¾¿ ã¾Æ°¡¸é¼ °øºÎÇÒ¼öÀÖ´Ù.
Áï ÇϳªÀÇ macro ¸¦ ¾Ë°í ¸ð¸£´Â°ÍÀÌ ±×·¸°Ô Áß¿äÇÏÁö´Â ¾ÊÀ¸¸ç ¿øÇÏ´Â check »çÇ×ÀÌ »ý±æ¶§¸¶´Ù macro ¸¦ Á¶»çÇÏ´Â °ÍÀ¸·Îµµ °¡´ÉÇÏ´Ù.
À̹ø ¿¹¿¡¼´Â °¢ platform º°·Î build Çϱ⸦ ¿øÇϱ⠶§¹®¿¡ configure ½Ã ÇöÀçÀÇ platform À» ¾Ë¾Æ¾ß Çϰí À̸¦ ¹ÙÅÁÀ¸·Î build ÇÒ subdirectory, Áï ÃÖ»óÀ§ Makefile.am ¿¡¼ SUBDIRS ¿¡ µé¾î°¡°ÔµÉ DIRS ÀÇ °ªÀ» °áÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ±âº»ÀûÀÎ ¿©·¯ macro µéÀÌ ÀÖ°ÚÁö¸¸ ÀÏ´Ü À̰úÁ¤ÀÌ ¾î¶»°Ô 󸮵ǴÂÁö¸¦ º¸ÀÚ.
AC_CANONICAL_SYSTEM
case "$target" in
i?86-*-linux*)
DIRS="linux" ;
AC_SUBST(DIRS)
;;
*solaris*)
DIRS="solaris" ;
AC_SUBST(DIRS)
;;
*)
echo unsupported system : $target
;;
esac
AC_CANONICAL_SYSTEM À̶ó´Â macro ¸¦ ÅëÇØ¼ target À̶ó´Â shell º¯¼ö¿¡
ÇöÀç system ÀÇ Á¤º¸¸¦ ±â·ÏÇÏ°Ô µÈ´Ù. ÀÌ Á¤º¸´Â configuration name Çü½ÄÀ¸·Î
cpu-manufacturer-operation_system À¸·Î ±¸¼ºµÇ¸ç, À§ÀÇ case ¹®Àº À̸¦ ¹ÙÅÁÀ¸·Î
¾²¿©Á³´Ù. Áï AC_CANONICAL_SYSTEM À̶ó´Â macro ÀÇ ½ÇÇà°á°ú »ý±ä target º¯¼öÀÇ
³»¿ëÀ» ¹ÙÅÁÀ¸·Î target ¿¡ µû¸¥ ÇൿÀ» ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
ÀÌÁ¦ case ¹® ¾ÈÀ¸·Î µé¾î°¡¸é DIRS ¶ó´Â º¯¼ö¿¡ linux ¶Ç´Â solaris ¸¦ assign
Çϰí À̸¦ AC_SUBST() macro ¸¦ ÅëÇØ ´ëÄ¡½Ã۰í ÀÖ´Ù. ÀÌ macro ´Â parameter ·Î¹ÞÀº º¯¼ö¿¡ ´ëÇØ Makefile.am À̳ª *.in ¿¡¼ ÀÌ º¯¼ö¸íÀ» ¾²´Â °ªµéÀ» ÇöÀç assign ÇÑ °ªÀ¸·Î ´ëÄ¡½ÃÄÑ ÁØ´Ù. À̹ø ¿¹Á¦ÀÇ °æ¿ì´Â ÃÖ»óÀ§ directoryÀÇ Makefile.am
¿¡¼ SUBDIRS=@DIRS@ ÀÇ DIRS ÀÇ °ªÀ» ¹Ù²Ù°Ô µÈ´Ù.
µû¶ó¼ configure ¸¦ °ÅÄ¡°Ô µÇ¸é ÃÖ»óÀ§ Makefile.am ÀÇ SUBDIRS ¿¡´Â ÇØ´ç ¸Ó½Å¿¡µû¶ó linux ȤÀº solaris °¡ µé¾î°¡°Ô µÈ´Ù. ÆíÀÇ»ó ÇöÀç configure °¡ ÀϾ°í ÀÖ´Â
¸Ó½ÅÀ» linux ¶ó°í ÇÒ¶§ SUBDIRS=linux °¡ µÇ¾î¼ make ¸¦ ÇÏ°Ô µÉ °æ¿ì ÀÌ Makefile
(ÃÖ»óÀ§ directory ÀÇ Makefile.am ¿¡¼ ¸¸µé¾îÁö´Â Makefile)
¿¡ ÀÇÇØ linux directory ¸¸ ºôµå°¡ ÀÌ·ç¾î Áö°Ô µÈ´Ù. solaris directory ¿¡ ´ëÇÑ ºôµå´Â ÀÌ·ç¾îÁöÁö ¾ÊÀ¸¸ç µû¶ó¼ platform À» µûÁ®¼ ¿øÇÏ´Â source ¸¦ ºôµåÇÒ¼ö ÀÖ°Ô µÈ´Ù.
ÇϺΠdirectory ÀÇ Makefile.am ÀÇ ¿ªÇÒ
±âº»ÀûÀÎ »ç¿ëÀ» À§Çؼ´Â ´ÙÀ½ µÎÁٷεµ ÃãºÐÇÕ´Ï´Ù.
./linux/Makefile.am
bin_PROGRAMS = linux
linux_SOURCES = linux.c
±âº»ÀûÀ¸·Î Makefile.am ¿¡µµ ¾µ¼ö ÀÖ´Â °ªµéÀÌ Á¤ÇØÁ® ÀÖ´Ù.
_PROGRAMS, _SCRIPTS, _DATA, _SOURCES primry µéÀ» ¾µ ¼ö Àִµ¥ undersquare ¾Õ¿¡
ƯÁ¤ directory ¸¦ Á¤ÇØ ÁÖ¾î¾ß Çϴµ¥ ÀÌ directory °¡ ÇØ´ç ÇÁ·Î±×·¥À̳ª ÆÄÀϵéÀÌ install µÉ À§Ä¡¸¦ °¡¸£Å²´Ù. À§ÀÇ Makefile.am ¿¡¼´Â linux.c ÆÄÀÏÀ» compile ÇØ¼
linux ¶ó´Â À̸§ÀÇ ÇÁ·Î±×·¥À¸·Î ¸¸µçÈÄ À̸¦ bin directory ¿¡ install ÇÏ°Ô µÈ´Ù.
¿©±â¼ bin directory´Â À§ÀÇ configure.ac ¿¡¼ Á¤ÀÇµÈ default prefix ¾Æ·¡ÀÇ bin
directory ¸¦ °¡¸£Å°°Ô µÈ´Ù. Áï, configure.ac ¿¡¼
AC_PREFIX_DEFAULT(/usr/eostk)
¶ó°í Á¤ÀÇÇÏ¿´´Ù¸é, ÀÌ bin Àº /usr/eosrk/bin ÀÌ µÇ°í linux ÇÁ·Î±×·¥Àº ±× ¾Æ·¡¿¡ install µÈ´Ù.
_SCRIPTS ´Â script ¸¦ install Çϱâ À§ÇØ ¾²À̰í _DATA ´Â ±×³É ÆÄÀϵéÀ» install ÇÏ°Ô µÉ °æ¿ì¿¡ ¾²ÀδÙ. µÑ´Ù _SOURCES ¸¦ ÇÊ¿ä·Î ÇÏÁö ¾Ê±â ¶§¹®¿¡ ºñ½ÁÇϳª
_SCRIPTS ´Â ½ÇÇà °¡´ÉÇϰí _DATA ´Â ½ÇÇàºÒ°¡´ÉÇϱ⶧¹®¿¡ µû·Î ¾²°í ÀÖ´Ù.
ÀÌ·¸°Ô ¾²¿©Áø Makefile.am Àº configure ½Ã ÃÖ»óÀ§ Makefile.am ¿¡¼ ÁöÁ¤ÇÏ´Â SUBDIRS ¿¡ Æ÷Ç﵃ °æ¿ì¸¸ build °¡ ÀÌ·ç¾îÁö´Âµ¥ ÃÖ»óÀ§ Makefile.am ó·³ ÁöÁ¤µÈ º¯¼ö°¡ ÀÖ°í À̸¦ configure.ac ¿¡¼ Ä¡È¯ÇØ Áشٸé ÇØ´ç À¯È¿°ªÀÌ µé¾î°¡¼ Makefile ÀÌ
¸¸µé¾î Áö°Ô µÈ´Ù.(½ÇÁ¦·Î´Â Makefile.am Àº automake ¸¦ ÅëÇØ Makefile.in ·Î ¸¸µé¾îÁö°í configure ½Ã À̸¦ ÀԷ°ªÀ¸·Î ÃëÇØ¼ Makefile ÀÌ ¸¸µé¾î Áø´Ù.)
½ÇÇà¼ø¼
À§ÀÇ °úÁ¤À» ½ÇÇà½ÃŰ´Â ¹æ¹ýÀº ¾Æ·¡¿Í °°´Ù.
aclocal
autoheader
autoconf
automake --add-missing -copy
./configure
make
make check
make install
ÈçÈ÷ configure Àü±îÁöÀÇ °úÁ¤À» ¹¾î¼ bootstrap ¶Ç´Â autogen.sh ¶ó´Â script ·Î ¸¸µé¾î¼ ÇѲ¨¹ø¿¡ ½ÇÇà½ÃŲ´Ù. end user ´Â ´ÜÁö ./configre, make, make install ¸¸À» ÇÏ¸é Æ¯Á¤ ¼Ò½º¸¦ build ÇÒ ¼ö Àִµ¥ autogen.sh ¸¦ end user °¡
ÇÒ¼öÀÖ¾î¾ß ÇÑ´Ù ¾ø¾î¾ß ÇѴٴµ¥¿¡´Â ¿©·¯ ÀǰßÀÌ ÀÖ´Ù.
¿ä¾à°ú Àüü È帧 Á¤¸®
Áö±Ý±îÁö ¿¹Á¦¸¦ º¸¸é ÃÖ»óÀ§ Makefile.am ¿¡ configure ½Ã¿¡ build µÉ subdirectory ¸¦ Á¤Çϵµ·Ï ÇÏ¿´À¸¸ç ÀÌ °ªÀ» ¾Ë¾Æ³»±â À§ÇØ configure.ac ¿¡¼ Çö ½Ã½ºÅÛÀ»
°Ë»çÇϰí ÀÌ °ªÀ» ³Ñ°ÜÁÖµµ·Ï µÇ¾îÀÖ´Ù. Áï configure ½ÇÇàÈÄ make ¸¦ ÇÏ°Ô µÇ¸é
ÃÖ»óÀ§ Makefile ¿¡ ÀÇÇØ¼ ÁöÁ¤µÈ directory ¸¸ build °¡ ÀÌ·ç¾îÁ® platform ¿¡ µû¶ó ¾Ë¸Â´Â ¼Ò½º°¡ build µÇ°í install µÉ ¼ö ÀÖ´Ù.
Áö±ÝÀº directory ´ÜÀ§·Î ƯÁ¤ directory ¸¦ build ÇÒÁö ¾ÈÇÒÁö¸¦
°áÁ¤ÇÏ¿´Áö¸¸ autotools À» Á»´õ ¹Ì½ÃÀûÀº ¹üÀ§¿¡¼ ÀÌ¿ëÇÑ´Ù¸é ÇϳªÀÇ Äڵ忡 ´ëÇØ¼µµ define ¹®À» ÀÌ¿ëÇØ¼ ¼±º°ÀûÀ¸·Î Äڵ尡 build µÇ°Ô ÇÒ ¼ö ÀÖ´Ù.
񃧯 template - configure.ac, Makefile.am
configure.ac, Makefile.am À» ÀÛ¼ºÇÒ¶§ ±âº»ÀûÀ¸·Î Àû¾î¾ßÇÏ´Â macro µîÀ»
¼³¸íÇϰڴÙ. À§ÀÇ Àüü È帧À» ÀÌÇØÇßÀ¸¸é Áö±ÝºÎÅÍÀÇ »çÇ×µéÀº Çѹø Àаí Áö³ªÃĵµ µÈ´Ù. ±×·¯³ª ±âº»ÀÎ ¸¸Å ÀÌ´ë·Î ¾²Áö ¾ÊÀ»°æ¿ì ÀüÇô ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. --;
configure.ac
configure.ac ¿¡¼´Â check »çÇ×µéÀ» test ÇÏ´Â ÀϹÝÀûÀÎ ¼ø¼°¡ Á¤ÇØÁ®ÀÖ´Ù.
ÀÌ ¼ø¼¸¦ µû¸£¸é¼ ÇÊ¿äÇÑ »çÇ׵鸸 °Ë»çÇÏ¸é µÈ´Ù. ´ë·«ÀûÀÎ ¼ø¼´Â
Boilerplate : ±âº»ÀûÀÎ macro. AC_INIT ÀÌ Àִµ¥ ÀÌ´Â ²À ¸Ç ¾Õ¿¡ ¾²¿©Á® ÀÖ¾î¾ß ÇÑ´Ù. AM_INIT_AUTOMAKE, AC_CONFIG_HEADER, AC_REVISION ÀÌ ÀÌ¿¡ ¼ÓÇÑ´Ù. ÈçÈ÷ AC_INIT °ú AM_INIT_AUTOMAKE, AM_CONFIG_HEADER ´Â ²À µé¾î°£´Ù.
Options
Programs : configure °úÁ¤À̳ª build °úÁ¤»ó¿¡ ÇÊ¿äÇÑ
ÇÁ·Î±×·¥µéÀ» check ÇÑ´Ù. AC_CHECK_PROG, AC_PATH_TOOL ÀÌ ÀÖ´Ù.
Libraries
Headers : ÇÊ¿äÇÑ header file µéÀÌ Á¸ÀçÇÏ´ÂÁö¸¦ °Ë»çÇÑ´Ù.
Typedefs and structures
Functions
Output
À§ÀÇ Ç׸ñµéÀº autoscan À» ÅëÇØ¼ configure.scan À̶ó´Â ÆÄÀÏÀ» »ý¼ºÇϰÔ
µÇ¸é ±×´ë·Î ³ª¿À°Ô µÈ´Ù. ÀÌ autoscan Àº configure.ac ÆÄÀÏÀÇ ÀÛ¼ºÀ» ½±°Ô ÇØÁÖ°íÀÚ ÇÏ´Â µµ±¸ÀÌ´Ù. Ç㳪 ¾ÆÁÖ ÀÚ¼¼ÇÑ °Í±îÁö Ãâ·ÂÀ» ÇØÁÖ°í ÇÊ¿ä¾ø´Â °ÍµéÀÌ ¸¹±â¶§¹®¿¡
configure.ac ´Â Á÷Á¢ ÀÛ¼ºÇϴ°ÍÀÌ ÁÁ´Ù°í »ý°¢µÈ´Ù. °£´ÜÈ÷ ¿¹¸¦ µé¾îº¸¸é
# Process this file with autoconf to produce a configure script.
AC_INIT(eostk, 1.0, sylee@inzen.com)
AM_INIT_AUTOMAKE(eostk, 1.0)
AM_CONFIG_HEADER(config.h:config.h.in)
# Checks for programs.
AC_PROG_CC
AC_PROG_INSTALL
# Checks for libraries.
AC_CHECK_LIB(socket, connect)
# Checks for header files.
AC_HEADER_DIRENT
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_UID_T
AC_TYPE_PID_T
# Checks for library functions.
AC_HEADER_STDC
AC_CHECK_FUNCS(strcpy bcopy)
# Finally, make output files
AC_CONFIG_FILES(
Makefile
solaris/Makefile
linux/Makefile
)
AC_OUTPUT
¼øÀÌ µÉ¼öÀÖ´Ù. ÀÌ ¼ø¼´ë·Î ÇÊ¿äÇÑ check »çÇ×À» Ãß°¡½Ãų¼öµµ ÀÖ°í
ÇÊ¿ä¾ø´Â°ÍÀº Á¦¿Ü½Ãų¼öµµ ÀÖ´Ù.configure ½Ã¿¡ ¸ðµç ÇÊ¿äÇÑ Á¤º¸µéÀÌ ¼öÁýµÈ´Ù°í ÇÒ¶§ ÀÌÀÇ ÃʾÈÀÌ µÇ´Â configure.ac ÆÄÀÏÀÌ °¡Àå Áß¿äÇÏ´Ù°í ÇÒ¼öÀÖ´Ù.
Makefile.am
Makefile.am ÀÇ ±âÃÊ´Â À§¿¡¼ ¼³¸íÇÑ °ÍÀ¸·Î ÃæºÐÇÏ´Ù°í »ý°¢ÇÑ´Ù. Ãß°¡ÀûÀ¸·Î ¾Ë°íÀÖÀ¸¸é ÁÁÀº »çÇ×µéÀ» Àû¾îº¸¸é check_ prefix ¿Í TESTS primary, install-exec-hook ÀÌ ÀÖ´Ù.
check_ prefix, TESTS primary : À̵éÀº make check À¸·Î ½ÇÇàÀÌ
µÇ´Â ÆÄÀϵéÀ» ÁöÁ¤ÇÒ¼öÀÖ´Ù. ÈçÈ÷ testsuit ÀÌ ÀÌ¿¡ ÇØ´çÇϴµ¥ ¿©±â¿¡ ÁöÁ¤µÈ
ÇÁ·Î±×·¥µéÀº ½ÇÁ¦·Î´Â install µÇÁö ¾Ê°í build time ¿¡¸¸ ½ÇÇàÀÌ °¡´ÉÇÏ´Ù. Áï
make check À» Çϸé TESTS ¿¡ Á¤ÀÇµÈ ÇÁ·Î±×·¥µéÀ» ã¾Æ¼ build ½ÃÄѼ ½ÇÇà½Ã۰Ô
µÈ´Ù. À̶§ install Àº ÀϾÁö ¾Ê´Â´Ù.
install-exec-hook target : make install À» Çϸé ÈçÈ÷ ÁöÁ¤µÈ µ¿ÀÛÀÌ ÀϾ°Ô µÈ´Ù. build °¡ ³¡³ÈÄ À̸¦ ÁöÁ¤ÇÑ directory ¿¡ º¹»çÇϰųª Çϴµ¥
À̸¦ ¸¶Ä£ÈÄ Ãß°¡ÀûÀÎ ÀÛ¾÷À» ÇϰíÀÚ ÇÒ °æ¿ì install-exec-hook ¿¡ ±× ÇൿÀ» ÁöÁ¤ÇØ ÁÖ¸é µÈ´Ù. À̸¦ install hook À̶ó°í ÇÑ´Ù.
check_PROGRAMS = test1
test1_SOURCES = test1.c
check_SCRIPTS = test2
TESTS = test1 \
test2
install-exec-hook :
chmod +x INSTALL.solaris
./INSTALL.solaris
ÀÌ·¸°Ô Çϸé test1 À̶ó´Â c ÇÁ·Î±×·¥°ú test2 ¶ó´Â script °¡ make check
½Ã ½ÇÇàµÉ TESTS ÆÄÀÏ·Î ÁöÁ¤ÀÌ µÇ°í make check ÀÌ ºÒ·ÁÁö±â Àü±îÁö´Â build µÇÁö ¾Ê´Â´Ù. make check ÀÌ ºÒ·¯Áö¸é test1 ÀÌ ºôµåµÇ°í test1 test2 ¼øÀ¸·Î ½ÇÇàµÈ´Ù. ±×·¯³ª install Àº µÇÁö ¾Ê´Â´Ù.
install-exec-hook À̶ó´Â target Àº make install À» Á¤»óÀûÀ¸·Î ½ÇÇàÇÑÈÄ
½ÇÇàµÈ´Ù. ÇöÀç directory °¡ solaris ¶ó°í ÇÒ¶§ solaris ÀÇ make install °úÁ¤À»
¸¶Ä£ÈÄ¿¡ ½ÇÇàÀÌ µÈ´Ù. ÀÌ ÈÄ¿¡ solaris2 ¶ó´Â directory ¸¦ ºôµåÇÏ°Ô µÇ¾îÀÖ´Ù
ÇÏ´õ¶óµµ ÀÌ °úÁ¤Àº ÇØ´ç directory ÀÇ install À» ¸¶Ä£ÈÄ¿¡ ÀϾÙ. Áï solaris ÀÇ make install À» ¸¶Ä£ÈÄ¿¡ ÀÌ °úÁ¤ÀÌ ½ÇÇàµÈ´Ù. ±× ÈÄ¿¡ solaris2 ¸¦ build ÇϰÔ
µÈ´Ù.
¹Ì½ÃÀû autotools ÀÇ ÀÌ¿ë
ÀÌ ¹®¼´Â multi platform ¿¡¼ ÇØ´ç platform ¿¡ ¸Â´Â build ¸¦ Çϱâ À§ÇÑ howto ¸¸À» Á¦°øÇϰí ÀÖ´Ù. ÇÏÁö¸¸ ¾Õ¿¡¼ Àá±ñ À̾߱âÇßµíÀÌ autotools À» ¹Ì½ÃÀûÀÎ
¹üÀ§±îÁö »ç¿ëÇϸé¼, config.h ¸¦ È¿°úÀûÀ¸·Î »ç¿ëÇÑ´Ù¸é ÇϳªÀÇ code ¸¦ ¾ó¸¶µçÁö
´Ù¸£°Ô build ÇÒ ¼ö ÀÖ´Ù.
¿¹¸¦ µé¾î ¾ÕÀåÀÇ configure.ac ¸¦ º¼¶§,
AC_CHECK_FUNCS(strcpy bcopy)
¶ó´Â ºÎºÐÀÌ ÀÖ´Ù. ÀÌ macro ¸¦ ½ÇÇàÇÏ°í ³ª¸é config.h ¿¡ ÇöÀç configure °¡
ÀÏ¾î³ system¿¡ strcpy, bcopy ¶ó´Â ÇÔ¼ö°¡ ÀÖ´ÂÁö ¾ø´ÂÁö¿¡ ´ëÇÑ ±â·ÏÀÌ ³²°Ô µÈ´Ù.µû¶ó¼ °³¹ßÀÚ°¡ ¹Ì¸® Ȥ½Ã³ª strcpy ³ª bcopy ¸¦ °¡Áö°í ÀÖÁö ¾Ê´Â system¿¡ ´ëÇÑ Ã³¸®¸¦ ÇØÁÙ¼ö°¡ ÀÖ´Ù.
config.h ÀÇ ³»¿ë
#define HAVE_BCOPY 1
strcpy ¸¦ »ç¿ëÇÏ´Â code ½ÃÀÛ ºÎºÐ ȤÀº ±× code °¡ include ÇÏ´Â header file
#if !HAVE_STRCPY
# if HAVE_BCOPY
# define strcpy(dest,src) bcopy(src, dest, 1+strlen(src))
# else
error no strcpy or bcopy
# endif
#endif
À§Ã³·³ Çϸé strcpy ¸¦ °¡Áö°í ÀÖÁö ¾ÊÀº machine ¿¡ ´ëÇØ À̸¦ bcopy ¸¦ ÀÌ¿ëÇØ ±¸ÇöÇÒ ¼ö ÀÖ°Ô ÇØÁÙ ¼ö ÀÖ´Ù. Áï ÀÛÀº ¹üÀ§¿¡±îÁö Àß ÀÌ¿ëÇÑ´Ù¸é ¿Ïº®È÷ system independent ÇÑ code ¸¦ ¸¸µé ¼ö ÀְԵȴÙ.
Âü°íÀÚ·á
GNU AUTOCONF, AUTOMAKE, and LIBTOOL(-Gary V.Vaughan, Ben Elliston, Tom Tromey, and Ian Lance Taylor- New Riders) À̶ó´Â Ã¥À» Âü°íÇÏ¿´´Ù. ÀÌ¿Í ÇÔ²² http://www.gnu.org/manual ¿¡ ÀÖ´Â
autoconf, automake ¸¦ °£·«È÷ º¸¾Ò´Ù.
ÀüüÀûÀ¸·Î µ¹¾Æ°¡´Â °³³äÀ» ÀÍÈ÷±â À§Çؼ´Â À§ÀÇ Ã¥ÀÌ ÁÁ°í ±âŸ ÀÚ¼¼ÇÑ
option À̳ª macro ¿¡ ´ëÇØ¼´Â gnu manual À» ã¾Æº¸¸é¼ ÀÛ¾÷ÇÏ´Â°Ô ÁÁ´Ù°í »ý°¢
µÈ´Ù.. <--- °³ÀÎÀûÀÎ »ý°¢ÀÔ´Ï´Ù.
·ùâ¿ì¾¾²²¼ ±×¸®½Å °³³äµµ¸¦ ÷ºÎÇÕ´Ï´Ù. ¿ª½Ã µµ¿òÀÌ µÇ¸®¶ó »ý°¢ÇÕ´Ï´Ù.
autotools input/output by 1999 Changwoo Ryu