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 ¿¡ À§Ä¡Çϵµ·Ï ÇÑ´Ù. Áï °¡Àå »óÀ§ 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 ÀÌ ¾î¶»°Ô ÀÛµ¿ÇÏ´Â Áö »ìÆìº¸ÀÚ.

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 µÇ°Ô ÇÒ ¼ö ÀÖ´Ù.