· 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 are unscrupulously dishonest, false, and deceitful.


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.0022 sec