make
»ç¿ëÇϱâ(Using make
to Update Archive Files)
¾ÆÄ«À̺ê ÆÄÀÏ(Archive files) À̶õ members ¶ó°í ºÒ¸®´Â ¼ºê
ÆÄÀϵéÀ» ´ã°í ÀÖ´Â ÆÄÀϵéÀÌ´Ù; À̵éÀº ÇÁ·Î±×·¥ ar
¿¡ ÀÇÇؼ
°ü¸®µÇ°í ±×µéÀÇ ÁÖ¿ä »ç¿ëÀº ¸µÅ©¸¦ À§ÇÑ ¼ºê·çƾ ¶óÀ̺귯¸®ÀÌ´Ù.
¾ÆÄ«À̺ê ÆÄÀÏÀÇ °³º° ¸â¹ö´Â make
¿¡¼ Ÿ°ÙÀ̳ª Á¾¼Ó¹°·Î½á
»ç¿ëµÉ ¼ö ÀÖ´Ù. archive ÀÇ member ¶ó´Â À̸§ÀÇ ¸â¹ö¸¦
´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÑ´Ù:
archive(member)
ÀÌ·± ±¸Á¶´Â Ÿ°Ù°ú Á¾¼Ó¹°µé¿¡¼¸¸ °¡´ÉÇÏ°í ¸í·Éµé¿¡¼´Â
ºÒ°¡´ÉÇÏ´Ù. ¸í·Éµé ¾È¿¡¼ »ç¿ëÇÒ ´ëºÎºÐÀÇ ÇÁ·Î±×·¥µéÀº ÀÌ·± ¹®¹ýÀ»
Áö¿øÇÏÁö ¾Ê°í ¾ÆÄ«ÀÌºê ¸â¹öµé¿¡ ´ëÇؼ Á÷Á¢ ¾×¼ÇÀ» ÃëÇÒ ¼ö ¾ø´Ù. ´ÜÁö
ar
°ú ¾ÆÄ«À̺êµé¿¡ ´ëÇؼ ÀÛµ¿Çϵµ·Ï Ưº°È÷ °í¾ÈµÈ ´Ù¸¥
ÇÁ·Î±×·¥µéÀÌ ±×·¸°Ô ÇÒ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î ¾ÆÄ«ÀÌºê ¸â¹ö Ÿ°ÙÀ» °»½ÅÇÏ´Â
À¯È¿ÇÑ ¸í·ÉµéÀº ¹Ýµå½Ã ar
À» »ç¿ëÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î¼ ´ÙÀ½
±ÔÄ¢Àº ÆÄÀÏ `hack.o'À» º¹»çÇؼ `foolib' ¾ÆÄ«ÀÌºê ³»
`hack.o' ¸â¹ö¸¦ »ý¼ºÇϵµ·Ï ¸»ÇÏ´Â °ÍÀÌ´Ù:
foolib(hack.o) : hack.o ar cr foolib hack.o
»ç½Ç °ÅÀÇ ¸ðµç ¾ÆÄ«ÀÌºê ¸â¹ö Ÿ°ÙµéÀÌ ÀÌ·± ¹æ½ÄÀ¸·Î °»½ÅµÇ°í ÀÌ°ÍÀ»
»ç¿ëÀÚ ´ë½Å ÇØÁÖ´Â ¹¬½ÃÀû ±ÔÄ¢ÀÌ Çϳª ÀÖ´Ù. ³ëÆ®(Note):
±× ¾ÆÄ«À̺ê ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é
ar
¿¡°Ô `c' Ç÷¡±×¸¦ ÁÖ¾î¾ß ÇÑ´Ù.
µ¿ÀÏÇÑ ¾ÆÄ«À̺êÀÇ ¸î°¡Áö ¸â¹öµéÀ» ÁöÁ¤ÇÏ·Á¸é °ýÈ£µé ¾È¿¡ ¸ðµç ¸â¹ö À̸§µéÀ» ¾µ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼:
foolib(hack.o kludge.o)
ÀÌ°ÍÀº ´ÙÀ½°ú µ¿ÀÏÇÏ´Ù:
foolib(hack.o) foolib(kludge.o)
¾ÆÄ«ÀÌºê ¸â¹ö ÂüÁ¶¿¡¼ ½©-½ºÅ¸ÀÏ ¿ÍÀϵåÄ«µåµéÀ» »ç¿ëÇÒ¼öµµ ÀÕ´Ù. See section ÆÄÀÏ À̸§¿¡ ¿ÍÀϵåÄ«µå »ç¿ë(Using Wildcard Characters in File Names). ¿¹¸¦ µé¾î¼ `foolib(*.o)' ´Â ±×°ÍÀÇ À̸§ÀÌ `.o' ·Î ³¡³ª´Â `foolib' ¾ÆÄ«À̺êÀÇ ¸ðµç Á¸ÀçÇÏ´Â ¸â¹öµé·Î È®ÀåµÈ´Ù; ¾Æ¸¶ `foolib(hack.o) foolib(kludge.o)'.
`o(m)' ¿Í °°ÀÌ º¸À̴ Ÿ°ÙÀº ¾ÆÄ«À̺ê ÆÄÀÏ o ÀÇ m À̶ó´Â À̸§ÀÇ ¸â¹ö¸¦ ³ªÅ¸³½´Ù´Â °ÍÀ» »ó±âÇÏÀÚ.
make
´Â ±×·± Ÿ°Ù¿¡ ´ëÇÑ ¹¬½ÃÀû ±ÔÄ¢À» ã´Â´Ù. Ư¼ö ±â´ÉÀ¸·Î½á
ÀÌ°ÍÀº `(m)' °ú ÀÏÄ¡ÇÏ´Â ¹¬½ÃÀû ±ÔÄ¢µéÀ» »ý°¢ÇÑ´Ù. ½ÇÁ¦
Ÿ°Ù `a(m)' °ú ÀÏÄ¡ÇÏ´Â °Íµé°ú ÇÔ²².
ÀÌ°ÍÀº Ÿ°ÙÀÌ `(%)' ÀΠƯ¼ö ±ÔÄ¢ÀÌ ºñ±³µÇµµ·Ï À¯¹ßÇÑ´Ù. ÀÌ ±ÔÄ¢Àº ÆÄÀÏ m ¸¦ ±× ¾ÆÄ«À̺ê·Î º¹»çÇÔÀ¸·Î½á Ÿ°Ù `a(m)' ¸¦ ¾÷µ¥ÀÌÆ®ÇÑ´Ù. ¿¹¸¦ µé¾î¼ ÀÌ°ÍÀº ÆÄÀÏ `bar.o' ¸¦, `bar.o' ¶ó´Â À̸§ÀÇ ¸â¹ö ·Î½á ¾ÆÄ«À̺ê ÆÄÀÏ `foo.a' ¾ÈÀ¸·Î º¹»çÇÔÀ¸·Î½á, ¾ÆÄ«ÀÌºê ¸â¹ö Ÿ°Ù `foo.a(bar.o)' ¸¦ °»½ÅÇÒ °ÍÀÌ´Ù.
ÀÌ ±ÔÄ¢ÀÌ ´Ù¸¥ °Íµé°ú ¿¬¼âµÈ °ÍÀÌ¸é ±× °á°ú´Â ¾ÆÁÖ °·ÂÇÑ °ÍÀÌ´Ù. ±×·¡¼ `bar.c' ¶ó´Â ÆÄÀÏÀÌ ÀÖÀ» ¶§, `make "foo.a(bar.o)"' (¿©±â¼ µû¿ÈÇ¥µéÀº `(' °ú `)' °¡ ½©¿¡ ÀÇÇؼ Ư¼öÇÏ°Ô Çؼ®µÇ´Â °ÍÀ» ¸·±â À§Çؼ ÇÊ¿äÇÏ´Ù) ´Â, makefile ÀÌ ¾ø´Ù°í ÇÏ´õ¶óµµ, ´ÙÀ½ ¸í·ÉµéÀÌ ½ÇÇàµÇµµ·Ï Çϱ⿡ ÃæºÐÇÑ °ÍÀÌ´Ù:
cc -c bar.c -o bar.o ar r foo.a bar.o rm -f bar.o
¿©±â¼ make
´Â Áß°£ ÆÄÀϷνá `bar.o' ¸¦
»ý°¢ÇÑ´Ù. See section ¹¬½ÃÀû ±ÔÄ¢ÀÇ ¿¬¼â(Chains of Implicit Rules).
ÀÌ°Í°ú °°Àº ¹¬½ÃÀû ±ÔÄ¢µéÀº ÀÚµ¿ º¯¼ö `$%' ¸¦ »ç¿ëÇؼ ÀÛ¼ºµÈ´Ù. See section ÀÚµ¿ º¯¼öµé(Automatic Variables).
¾ÆÄ«À̺꿡 ÀÖ´Â ¾ÆÄ«ÀÌºê ¸â¹ö À̸§Àº µð·ºÅ丮 À̸§À» ´ãÀ» ¼ö
¾ø´Ù. ±×·¯³ª makefile ¾È¿¡¼ ÀÌ°ÍÀÌ ±×·±°Íó·³ ÇÏ´Â °ÍÀº À¯¿ëÇÒ ¼ö
ÀÖ´Ù. `foo.a(dir/file.o)' À̶ó´Â ¾ÆÄ«ÀÌºê ¸â¹ö Ÿ°ÙÀ» ÀÛ¼ºÇÑ´Ù¸é
make
´Â ´ÙÀ½°ú °°Àº ¸í·ÉÀ¸·Î ÀÚµ¿ °»½ÅÇÒ °ÍÀÌ´Ù:
ar r foo.a dir/file.o
ÀÌ°ÍÀº `dir/file.o' ÆÄÀÏÀ» `file.o' À̶ó´Â À̸§ÀÇ ¸â¹ö·Î
º¹»çÇÏ´Â È¿°ú¸¦ °¡Áø´Ù. ±×·± »ç¿ë¿¡ ¿¬°á¿¡¼ %D
°ú %F
´Â
À¯¿ëÇÒ ¼ö ÀÖ´Ù.
¶óÀ̺귯¸®·Î½á »ç¿ëµÇ´Â ¾ÆÄ«À̺ê ÆÄÀÏÀº º¸Åë ´Ù¸¥ ¸ðµç ¸â¹öµé¿¡ ÀÇÇؼ
Á¤ÀÇµÈ ¿ÜºÎ ½É¹ú À̸§µéÀÇ µð·ºÅ丮(3)¸¦ °®°í ÀÖ´Â `__.SYMDEF' ¶ó´Â
À̸§ÀÇ Æ¯¼ö ¸â¹ö¸¦ ´ã°í ÀÖ´Ù. ´Ù¸¥ ¸â¹öµéÀ» °»½ÅÇÑ ÈÄ `__.SYMDEF'
¸¦ °»½ÅÇؼ ÀÌ°ÍÀÌ ´Ù¸¥ ¸â¹öµéÀ» ÀûÀýÇÏ°Ô ¿ä¾àÇÒ ¼ö ÀÖµµ·Ï Çؾß
ÇÑ´Ù. ÀÌ°ÍÀº ranlib
ÇÁ·Î±×·¥À» ½ÇÇàÇÔÀ¸·Î½á ÇàÇØÁø´Ù:
ranlib archivefile
ÀϹÝÀûÀ¸·Î ÀÌ ¸í·ÉÀ» ±× ¾ÆÄ«À̺ê ÆÄÀÏÀ» À§ÇÑ ±ÔÄ¢¿¡ ³ÖÀ» °ÍÀÌ´Ù. ±×¸®°í ±× ¾ÆÄ«À̺êÀÇ ¸ðµç ¸â¹öµéµéÀÌ ±× ±ÔÄ¢ÀÇ Á¾¼Ó¹°µéÀÌ µÇµµ·Ï ÇÒ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î¼,
libfoo.a: libfoo.a(x.o) libfoo.a(y.o) ... ranlib libfoo.a
ÀÌ°ÍÀÇ È¿°ú´Â `x.o', `y.o' µîÀÇ ¾ÆÄ«ÀÌºê ¸â¹öµéÀ» °»½ÅÇÏ´Â
°ÍÀÌ°í ranlib
¸¦ ½ÇÇàÇؼ `__.SYMDEF' ¶ó´Â ½É¹ú µð·ºÅ丮
¸â¹ö¸¦ °»½ÅÇÏ´Â °ÍÀÌ´Ù. ¸â¹öµéÀ» °»½ÅÇÏ´Â ±ÔÄ¢µéÀº ¿©±â¿¡ ³ª¿ÍÀÖÁö
¾Ê´Ù; ´ëºÎºÐÀÇ »ç¶÷µéÀº, ÀÌÀü ¼½¼Ç¿¡¼ ¼³¸íµÈ ¹Ù¿Í °°ÀÌ, ±×°ÍµéÀ»
»ý·«ÇÏ°í ¾ÆÄ«À̺ê·Î ÆÄÀϵéÀ» º¹»çÇÏ´Â ¹¬½ÃÀû ±ÔÄ¢À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÌ°ÍÀº `__.SYMDEF' ¸â¹ö¸¦ ÀÚµ¿À¸·Î °»½ÅÇÏ´Â, GNU ar
ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¶§, ¹Ýµå½Ã ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù.
º´·Ä ó¸®(-j
¿É¼Ç; see section Æз¯·² ½ÇÇà(Parallel Execution))¿Í
¾ÆÄ«À̺긦 »ç¿ëÇÒ ¶§ ÁÖÀÇÇØ¾ß ÇÑ´Ù. ÀÌ°ÍÀº ¾ÆÁÖ Áß¿äÇÏ´Ù. ¿©·¯
ar
¸í·ÉµéÀÌ µ¿ÀÏÇÑ ¾ÆÄ«À̺ê ÆÄÀÏ¿¡ ´ëÇؼ µ¿½Ã¿¡ ½ÇÇàµÇ¸é
±×µéÀº °¢±â ¼·Î ´Ù¸¥ °ÍµéÀ» ¸ð¸¦°ÍÀÌ¸ç ±×·¡¼ ±× ÆÄÀÏÀ»
¿À¿°½Ãų°ÍÀÌ´Ù.
¾Æ¸¶ make
ÀÇ ¹Ì·¡ ¹öÀüÀÌ µ¿ÀÏÇÑ ¾ÆÄ«À̺ê ÆÄÀÏ¿¡ ´ëÇؼ ÀÛµ¿ÇÏ´Â
¸ðµç ¸í·ÉµéÀ» ½Ã¸®¾ó¶óÀÌÁî(ÀÏ·Ä·Î ¼¼¿ì±â)ÇÔÀ¸·Î½á ÀÌ·± ¹®Á¦¸¦ ȸÇÇÇÏ´Â
¸ÞÄ«´ÏÁòÀ» Á¦°øÇÒ °ÍÀÌ´Ù. ±×·¯³ª ÇöÀçÀÇ °æ¿ì ´Ù¸¥ ¹æ½ÄÀ¸·Î ÀÌ·± ¹®Á¦¸¦
ȸÇÇÇϵµ·Ï makefile µéÀ» ÀÛ¼ºÇϰųª -j
¸¦ »ç¿ëÇؼ´Â ¾ÈµÈ´Ù.
¾ÆÄ«À̺ê ÆÄÀϵéÀ» °ü¸®Çϴ Ư¼öÇÑ Á¾·ùÀÇ Á¢¹Ì»ç ±ÔÄ¢À» ÀÛ¼ºÇÒ ¼ö
ÀÖ´Ù. Á¢¹Ì»ç ±ÔÄ¢µé¿¡ ´ëÇÑ ¿ÏÀüÇÑ ¼³¸íÀ» º¸·Á¸é See section ±¸´Ú´Ù¸® Á¢¹Ì»ç ±ÔÄ¢(Old-Fashioned Suffix Rules). GNU make
¿¡¼´Â ¾ÆÄ«À̺ê Á¢¹Ì»ç ±ÔÄ¢µéÀÌ
»çÀåµÇ¾ú´Ù. ¿Ö³Ä¸é ¾ÆÄ«À̺긦 À§ÇÑ ÆÐÅÏ ±ÔÄ¢ÀÌ Á» ´õ ÀϹÝÀûÀÎ ¸ÞÄ«´ÏÁò
(see section ¾ÆÄ«ÀÌºê ¸â¹ö Ÿ°Ùµé¿¡ ´ëÇÑ ¹¬½ÃÀû ±ÔÄ¢(Implicit Rule for Archive Member Targets)) À̱⠶§¹®ÀÌ´Ù. ±×·¯³ª ±×µéÀº ´Ù¸¥ make
µé°úÀÇ È£È¯¼º ¶§¹®¿¡ ±â´ÉÀº ³²¾Æ ÀÖ´Ù.
¾ÆÄ«À̺긦 À§ÇÑ Á¢¹Ì»ç ±ÔÄ¢À» ÀÛ¼ºÇϱâ À§Çؼ Ÿ°Ù Á¢¹Ì»ç `.a' (¾ÆÄ«À̺ê ÆÄÀϵ鿡 ´ëÇÑ ÀϹÝÀûÀÎ Á¢¹Ì»ç) ¸¦ »ç¿ëÇÏ´Â Á¢¹Ì»ç ±ÔÄ¢À» ÀÛ¼ºÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¾î¼ ´ÙÀ½Àº C ¼Ò½º ÆÄÀϵé·ÎºÎÅÍ ¶óÀ̺귯¸® ¾ÆÄ«À̺긦 °»½ÅÇÏ´Â ¿À·¡µÈ-½ºÅ¸ÀÏÀÇ Á¢¹Ì»ç ±ÔÄ¢ÀÌ´Ù:
.c.a: $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o $(AR) r $@ $*.o $(RM) $*.o
ÀÌ°ÍÀº ´ÙÀ½°ú °°Àº ÆÐÅÏ ±ÔÄ¢°ú ºñ½ÁÇÏ°Ô ÀÛµ¿ÇÑ´Ù:
(%.o): %.c $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o $(AR) r $@ $*.o $(RM) $*.o
»ç½Ç ÀÌ°ÍÀº make
°¡ `.o' ¸¦ Ÿ°Ù Á¢¹Ì»ç·Î½á °¡Áö´Â Á¢¹Ì»ç
±ÔÄ¢À» Çϳª º¸¾ÒÀ» ¶§ ÇàÇÏ´Â °Í ±×ÀÚüÀÌ´Ù. ÀÓÀÇÀÇ ´õºí-Á¢¹Ì»ç ±ÔÄ¢
`.x.a' Àº Ÿ°Ù ÆÐÅÏ `(%.o)' °ú Á¾¼Ó¹° ÆÐÅÏ
`%.x' ¸¦ °¡Áö´Â ÆÐÅÏ ±ÔÄ¢À¸·Î º¯È¯µÈ´Ù.
¾î¶² ´Ù¸¥ Á¾·ùÀÇ ÆÄÀÏ¿¡ ´ëÇÑ Á¢¹Ì»ç·Î½á `.a' ¸¦ »ç¿ëÇÏ·Á°í ÇÒ·±Áö
¸ð¸£±â ¶§¹®¿¡, make
´Â ¾ÆÄ«À̺ê Á¢¹Ì»ç ±ÔÄ¢µéÀ» ÀϹÝÀûÀÎ
¹æ¹ýÀ¸·Î(see section ±¸´Ú´Ù¸® Á¢¹Ì»ç ±ÔÄ¢(Old-Fashioned Suffix Rules)), ÆÐÅÏ ±ÔÄ¢µé·Î º¯È¯ÇÑ´Ù. ±×·¡¼
´õºí-Á¢¹Ì»ç ±ÔÄ¢ `.x.a' ´Â µÎ°¡Áö ÆÐÅÏ ±ÔÄ¢µé:
`(%.o): %.x' °ú `%.a: %.x' ¸¦
»ý¼ºÇÑ´Ù.
Go to the first, previous, next, last section, table of contents.