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 ¿¡ À§Ä¡Çϵµ·Ï ÇÑ´Ù. Áï °¡Àå »óÀ§ directory ¿¡ À§Ä¡Çϵµ·Ï ÇÏ°í 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