· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Docbook Sgml/Autotools-KLDP

AUTOTOOLS Howto

AUTOTOOLS Howto

À̽ÂÀ±

$Date $

autoconf, automake »ç¿ë¿¡ ´ëÇÑ ¼Ò°³

Copyright

ÀÌ ¹®¼­´Â GNU Free Documentation License ¹öÀü 1.1 ȤÀº ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î Àç´Ü¿¡¼­ ¹ßÇàÇÑ ÀÌÈÄ ÆÇÀÇ ±ÔÁ¤¿¡ µû¸£¸ç ÀúÀ۱ǿ¡ ´ëÇÑ º» »çÇ×ÀÌ ¸í½ÃµÇ´Â ÇÑ ¾î¶°ÇÑ Á¤º¸ ¸Åü¿¡ ÀÇÇÑ º»¹®ÀÇ ÀüÀ糪 ¹ßÃéµµ ¹«»óÀ¸·Î Çã¿ëµË´Ï´Ù.

고친 과정
고침 1.012002³â 5¿ù 7ÀÏ고친이 sylee
µÑ°¹öÁ¯
$Revision : $

1. 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 ¶ó°í ºÎ¸£°Ô µÇ¾ú´Ù.


2. °³¿ä

1. configure.ac ¿¡ Makefile ÀÌ ÇÊ¿ä·Î ÇÏ´Â »çÇ×µéÀ» ±â·ÏÇÑ´Ù.

2. Makefile.am ¿¡ ÀÌµé °¡º¯¼ö¸¦ »ç¿ëÇÏ¿© Makefile ÀÇ ÃʾÈÀ» ÀÛ¼ºÇÑ´Ù.

3. configure ½ÇÇà½Ã¿¡ configure.ac ¿¡ ÁöÁ¤ÇÑ Ç׸ñµéÀÌ check µÇ¸é¼­ Makefile.am ¿¡¼­ ÇÊ¿äÇÑ Á¤º¸µéÀÌ À¯È¿ÇÑ °ªµé·Î ġȯµÈ´Ù.

4. Makefile.am ÀÌ À¯È¿ÇÑ °ªµéÀ» °¡Áö¸é¼­ Makefile ÀÌ µÈ´Ù.


3. 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.


4. 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

5. 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

그림 1. autotools input/output diagram


6. Âü°í

autoconf,automake ¸¦ ½ÇÇàÇϱâ Àü¿¡ À̵éÀ» º¸Á¶ÇÏ´Â ¿ªÇÒÀ» ¼öÇàÇÒ ¼ö ÀÖ´Â °ÍÀ¸·Î aclocal, autoheader, autoscanÀÌ ÀÖ´Ù.


6.1. aclocal

  • configure.ac ¿¡¼­ ÁöÁ¤ÇÏ´Â macro ¿¡ ´ëÇÑ º¸Á¶¿ªÇÒÀ» ÇÑ´Ù. ±âº»ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â macro ¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù.


6.2. 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 ¸¦ ¸¸µé¼öÀְԵȴÙ.


6.3. autoscan

  • configure.ac ÀÇ ÃʾÈÀ̶ó ÇÒ¼öÀÖ´Â configur.scan À» ¸¸µé¾î ÁØ´Ù. configure.ac °¡ configure ¸¦ ¸¸µé¾î¼­ ÇÊ¿äÇÑ Á¤º¸¸¦ check ÇÑ´Ù°í ÇÒ¶§ ¸ðµç »çÇ×À» °ÅÀÇ´Ù check ÇØÁÖ´Â configure.scan Àº ¿ìÈ¿ÇÒ¼öÀÖÀ¸³ª ½ÇÁ¦·Î´Â ÇÊ¿äÇÑ ±â´É¸¸À» °¡Áö´Â configure.ac ¸¦ Á÷Á¢ÀÛ¼ºÇÏ´Â °ÍÀÌ ÁÁ´Ù°í »ý°¢µÈ´Ù. configure.scan Àº ³Ê¹« º¹ÀâÇÏ´Ù.´õ±º´Ù³ª 100% ½Å·Ú °¡´ÉÇÏ´Ù°í »ý°¢µÇÁö ¾Ê°íÀÖ´Ù.


7. °£´ÜÇÑ ¿¹Á¦ - 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 °ü·Ã ÆÄÀϵéÀÌ ³õÀÌ°Ô µÉ À§Ä¡¸¦ ¾Æ·¡¿¡¼­ º¸À̵µ·Ï ÇÏ°Ú½À´Ï´Ù.


7.1. ¼Ò½ºÀÇ À§Ä¡

¼Ò½ºµé(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 ¿¡¼­ ºÒ·¯¿Í »ç¿ë ÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù.


7.2. 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 ÀÌ ¾î¶»°Ô ÀÛµ¿ÇÏ´Â Áö »ìÆ캸ÀÚ.


7.3. ÃÖ»óÀ§ 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 ¿¡ ³Ñ°ÜÁÖ´ÂÁö º¸µµ·Ï ÇÑ´Ù.


7.4. 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 ¸¦ ºôµåÇÒ¼ö ÀÖ°Ô µÈ´Ù.


7.5. ÇϺΠ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 ÀÌ ¸¸µé¾î Áø´Ù.)


7.6. ½ÇÇà¼ø¼­

À§ÀÇ °úÁ¤À» ½ÇÇà½ÃÅ°´Â ¹æ¹ýÀº ¾Æ·¡¿Í °°´Ù.

 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 °¡ ÇÒ¼öÀÖ¾î¾ß ÇÑ´Ù ¾ø¾î¾ß ÇѴٴµ¥¿¡´Â ¿©·¯ ÀÇ°ßÀÌ ÀÖ´Ù.


7.7. ¿ä¾à°ú Àüü È帧 Á¤¸®

Áö±Ý±îÁö ¿¹Á¦¸¦ º¸¸é ÃÖ»óÀ§ Makefile.am ¿¡ configure ½Ã¿¡ build µÉ subdirectory ¸¦ Á¤Çϵµ·Ï ÇÏ¿´À¸¸ç ÀÌ °ªÀ» ¾Ë¾Æ³»±â À§ÇØ configure.ac ¿¡¼­ Çö ½Ã½ºÅÛÀ» °Ë»çÇÏ°í ÀÌ °ªÀ» ³Ñ°ÜÁÖµµ·Ï µÇ¾îÀÖ´Ù. Áï configure ½ÇÇàÈÄ make ¸¦ ÇÏ°Ô µÇ¸é ÃÖ»óÀ§ Makefile ¿¡ ÀÇÇؼ­ ÁöÁ¤µÈ directory ¸¸ build °¡ ÀÌ·ç¾îÁ® platform ¿¡ µû¶ó ¾Ë¸Â´Â ¼Ò½º°¡ build µÇ°í install µÉ ¼ö ÀÖ´Ù.

Áö±ÝÀº directory ´ÜÀ§·Î ƯÁ¤ directory ¸¦ build ÇÒÁö ¾ÈÇÒÁö¸¦ °áÁ¤ÇÏ¿´Áö¸¸ autotools À» Á»´õ ¹Ì½ÃÀûÀÎ ¹üÀ§¿¡¼­ ÀÌ¿ëÇÑ´Ù¸é ÇϳªÀÇ Äڵ忡 ´ëÇؼ­µµ define ¹®À» ÀÌ¿ëÇؼ­ ¼±º°ÀûÀ¸·Î Äڵ尡 build µÇ°Ô ÇÒ ¼ö ÀÖ´Ù.


8. 񃧯 template - configure.ac, Makefile.am

configure.ac, Makefile.am À» ÀÛ¼ºÇÒ¶§ ±âº»ÀûÀ¸·Î Àû¾î¾ßÇÏ´Â macro µîÀ» ¼³¸íÇÏ°Ú´Ù. À§ÀÇ Àüü È帧À» ÀÌÇØÇßÀ¸¸é Áö±ÝºÎÅÍÀÇ »çÇ×µéÀº Çѹø Àаí Áö³ªÃĵµ µÈ´Ù. ±×·¯³ª ±âº»ÀÎ ¸¸Å­ ÀÌ´ë·Î ¾²Áö ¾ÊÀ»°æ¿ì ÀüÇô ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. --;


8.1. 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 ÆÄÀÏÀÌ °¡Àå Áß¿äÇÏ´Ù°í ÇÒ¼öÀÖ´Ù.


8.2. 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 ÇÏ°Ô µÈ´Ù.


9. ¹Ì½ÃÀû 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 ¸¦ ¸¸µé ¼ö ÀְԵȴÙ.


10. Âü°íÀÚ·á

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 À» ã¾Æº¸¸é¼­ ÀÛ¾÷ÇÏ´Â°Ô ÁÁ´Ù°í »ý°¢ µÈ´Ù.. <--- °³ÀÎÀûÀÎ »ý°¢ÀÔ´Ï´Ù.

·ùâ¿ì¾¾²²¼­ ±×¸®½Å °³³äµµ¸¦ ÷ºÎÇÕ´Ï´Ù. ¿ª½Ã µµ¿òÀÌ µÇ¸®¶ó »ý°¢ÇÕ´Ï´Ù.

그림 2. autotools input/output by 1999 Changwoo Ryu


ID
Password
Join
You will be honored for contributing your time and skill to a worthy cause.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-11-08 23:40:30
Processing time 0.0033 sec