Ÿ°Ù ÆÄÀϵéÀ» ¸®¸ÞÀÌÅ©ÇÏ´Â ¾î¶² Ç¥ÁØ ¹æ¹ýµéÀÌ ÀÚÁÖ »ç¿ëµÈ´Ù. ¿¹¸¦
µé¾î¼ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µå´Â Åë»óÀûÀÎ ¹æ¹ýÀº C
¼Ò½º·ÎºÎÅÍ C ÄÄÆÄÀÏ·¯, cc
¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.
¹¬½ÃÀû ±ÔÄ¢(Implicit rules) Àº »ç¿ëÇÏ°íÀÚ ÇÒ ¶§ ±×°ÍµéÀ»
ÀÚ¼¼ÇÏ°Ô ÁöÁ¤ÇÒ ÇÊ¿ä¾øµµ·Ï, Åë»óÀûÀÎ Å×Å©´ÐµéÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ»
make
¿¡°Ô ¸»ÇÑ´Ù. ¿¹¸¦ µé¾î¼ C ÄÄÆÄÀÏÀ» À§ÇÑ ¹¬½ÃÀû ±ÔÄ¢ÀÌ
ÀÖ´Ù. ÆÄÀÏ À̸§µéÀÌ ¾î¶² ¹¬½ÃÀû ±ÔÄ¢µéÀÌ ½ÇÇàµÉ °ÍÀΰ¡¸¦
°áÁ¤ÇÑ´Ù. ¿¹¸¦ µé¾î¼ C ÄÄÆÄÀÏÀº `.c' ÆÄÀÏÀ» º¸Åë ÃëÇؼ
`.o' ÆÄÀÏÀ» ¸¸µç´Ù. ±×·¡¼ make
´Â ÀÌ°ÍÀÌ
ÆÄÀÏ À̸§ÀÇ ³¡ºÎºÐµé(È®ÀåÀÚµé)ÀÇ Á¶ÇÕÀ» º¼ ¶§ C ÄÄÆÄÀÏÀ» À§ÇÑ ¹¬½ÃÀû
±ÔÄ¢À» Àû¿ëÇÑ´Ù.
¹¬½ÃÀû ±ÔÄ¢µéÀÇ ¿¬¼â°í¸®°¡ ¼øÂ÷ÀûÀ¸·Î Àû¿ëµÉ ¼ö ÀÖ´Ù; ¿¹¸¦ µé¾î¼,
make
´Â `.y' ÆÄÀϷκÎÅÍ `.o' ÆÄÀÏÀ», `.c' ÆÄÀÏÀ»
°æÀ¯Çؼ ¸®¸ÞÀÌÅ©ÇÒ °ÍÀÌ´Ù.
See section ¹¬½ÃÀû ±ÔÄ¢ÀÇ ¿¬¼â(Chains of Implicit Rules).
³»Àå ¹¬½ÃÀû ±ÔÄ¢µéÀº, º¯¼öµéÀÇ °ªµéÀ» º¯°æÇؼ ¿©·¯ºÐÀÌ ¹¬½ÃÀû
±ÔÄ¢µéÀÌ ÀÛµ¿ÇÏ´Â ¹æ½ÄÀ» º¯°æÇÒ ¼ö ÀÖµµ·Ï, ±×µéÀÇ ¸í·É¿¡¼ ¸î°¡Áö
º¯¼öµéÀ» »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î¼ º¯¼ö CFLAGS
´Â C ÄÄÆÄÀÏÀ» À§ÇÑ
¹¬½ÃÀû ±ÔÄ¢¿¡ ÀÇÇؼ C ÄÄÆÄÀÏ·¯¿¡°Ô ÁÖ¾îÁø Ç÷¡±×µéÀ» Á¦¾îÇÑ´Ù.
See section ¹¬½ÃÀû ±ÔÄ¢¿¡ ÀÇÇØ »ç¿ëµÇ´Â º¯¼ö(Variables Used by Implicit Rules).
¿©·¯ºÐ ÀڽŸ¸ÀÇ ¹¬½ÃÀû ±ÔÄ¢µéÀ» ÆÐÅÏ ±ÔÄ¢µé(pattern rules)¸¦ ÀÛ¼ºÇÔÀ¸·Î½á Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. See section ÆÐÅÏ ±ÔÄ¢À» Á¤ÀÇÇÏ°í ÀçÁ¤Çϱâ(Defining and Redefining Pattern Rules).
Á¢¹Ì»ç ±ÔÄ¢(uffix rules) Àº ¹¬½ÃÀû ±ÔÄ¢µéÀ» Á¤ÀÇÇÏ´Â Á» ´õ Á¦ÇÑµÈ ¹æ½ÄÀÌ´Ù. ÆÐÅÏ ±ÔÄ¢µéÀÌ Á» ´õ ÀϹÝÀûÀÌ°í ¸íÄèÇÑ °ÍÀÌÁö¸¸ Á¢¹Ì»ç ±ÔÄ¢µéÀº ȣȯ¼ºÀ» À§Çؼ ¾ÆÁ÷ ³²¾Æ ÀÖ´Ù. See section ±¸´Ú´Ù¸® Á¢¹Ì»ç ±ÔÄ¢(Old-Fashioned Suffix Rules).
make
°¡ Ÿ°Ù ÆÄÀÏÀ» °»½ÅÇϱâ À§ÇÑ °ü½ÀÀûÀÎ ¹æ¹ýÀ» ãµµ·Ï Çϱâ
À§Çؼ ¿©·¯ºÐÀÌ ÇØ¾ß ÇÒ ÀÏÀº ¸í·ÉµéÀ» ½º½º·Î ÁöÁ¤ÇÏÁö ¾Êµµ·Ï ÇÏ´Â °ÍÀÌ
ÀüºÎÀÌ´Ù. ¸í·É ¶óÀεéÀÌ ¾ø´Â ±ÔÄ¢À» ÀÛ¼ºÇϰųª ±×·± ±ÔÄ¢À» ÀüÇô
ÀÛ¼ºÇÏÁö ¸»ÀÚ. ±×·¯¸é make
´Â »ç¿ëÇÒ ¹¬½ÃÀû ±ÔÄ¢À», ¾î¶² Á¾·ùÀÇ
¼Ò½º ÆÄÀÏÀÌ Á¸ÀçÇϴ°¡¿Í ¸¸µé¾îÁú ¼ö Àִ°¡¿¡ ±â¹ÝÇؼ, ã¾Æ³¾ °ÍÀÌ´Ù.
¿¹¸¦ µé¾î¼ makefileÀÌ ´ÙÀ½°ú °°ÀÌ »ý°å´Ù°í ÇÏÀÚ:
foo : foo.o bar.o cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)
`foo.o'¸¦ ¾ð±ÞÇßÁö¸¸ ±×°Í¿¡ ´ëÇÑ ±ÔÄ¢À» ÁöÁ¤ÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡
make
´Â ÀÚµ¿À¸·Î ±×°ÍÀ» °»½ÅÇÏ´Â ¹æ¹ýÀ» ¸»ÇÏ´Â ¹¬½ÃÀû ±ÔÄ¢À»
ãÀ» °ÍÀÌ´Ù. ÀÌ°ÍÀº `foo.o'°¡ ÇöÀç Á¸ÀçÇÏ´ÂÁö ¾ÈÇÏ´ÂÁö¿¡ »ó°ü¾øÀÌ
ÀϾÙ.
¹¬½ÃÀû ±ÔÄ¢ÀÌ ÀÖÀ¸¸é ÀÌ°ÍÀº ¸í·Éµé°ú Çϳª ÀÌ»óÀÇ Á¾¼Ó¹°µé(¼Ò½º ÆÄÀϵé) ¸ðµÎ¸¦ °ø±ÞÇÒ ¼ö ÀÖ´Ù. ¹¬½ÃÀû ±ÔÄ¢ÀÌ °ø±ÞÇÒ ¼ö ¾ø´Â, Çì´õ ÆÄÀϵé°ú °°Àº, Ãß°¡ÀÇ Á¾¼Ó¹°µéÀ» ÁöÁ¤ÇØ¾ß ÇÑ´Ù¸é, `foo.o'¿¡ ´ëÇÑ ±ÔÄ¢À» ¸í·É ¶óÀεéÀÌ ¾øÀÌ ÀÛ¼ºÇÏ°íÀÚ ÇÒ °ÍÀÌ´Ù.
°¢ ¹¬½ÃÀû ±ÔÄ¢Àº ÇϳªÀÇ Å¸°Ù ÆÐÅÏ°ú Á¾¼Ó¹° ÆÐÅϵéÀ» °¡Áø´Ù. µ¿ÀÏÇÑ
Ÿ°Ù ÆÐÅÏÀ» °¡Áö´Â ¸¹Àº ¹¬½ÃÀû ±ÔÄ¢µéÀÌ Á¸ÀçÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼
¸¹Àº ±ÔÄ¢µéÀÌ `.o' ÆÄÀϵéÀ» ¸¸µé ¼ö ÀÖ´Ù: Çϳª´Â, `.c' ÆÄÀϷκÎÅÍ
C ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÒ¼öµµ ÀÖ°í; ´Ù¸¥ °ÍÀº, `.p' ÆÄÀϷκÎÅÍ ÆĽºÄ®
ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù; ±âŸ µîµî. ½ÇÁ¦·Î Àû¿ëµÇ´Â ±ÔÄ¢Àº ±×°ÍÀÇ Á¾¼Ó¹°ÀÌ
Á¸ÀçÇϰųª ¸¸µé¾îÁú ¼ö ÀÖ´Â °Í ÇϳªÀÌ´Ù. ±×·¡¼ ÆÄÀÏ `foo.c'¸¦
°¡Áø´Ù¸é, make
´Â C ÄÄÆÄÀÏ·¯¸¦ ½ÇÇàÇÒ °ÍÀÌ´Ù; ±×·¸Áö ¾Ê°í
`foo.p'¸¦ °¡Áø´Ù¸é make
´Â ÆĽºÄ® ÄÄÆÄÀÏ·¯¸¦ ½ÇÇàÇÒ °ÍÀÌ´Ù;
±âŸ µîµî.
¹°·Ð, makefileÀ» ÀÛ¼ºÇÒ ¶§ ¿©·¯ºÐÀº make
°¡ »ç¿ëÇßÀ¸¸é ÇÏ´Â
¹¬½ÃÀû ±ÔÄ¢ÀÌ ¾î¶² °ÍÀΰ¡¸¦ ¾Ë°í ÀÖÀ¸¸ç, ¾î¶² Á¾¼Ó ÆÄÀϵéÀÌ Á¸ÀçÇÒ
°ÍÀΰ¡¸¦ ¾Ë°í Àֱ⠶§¹®¿¡ make
°¡ ±×°ÍÀ» ¼±ÅÃÇÒ °ÍÀ̶ó´Â °ÍÀ»
¾È´Ù. ¸ðµç »çÀü¿¡ Á¤ÀÇµÈ ¹¬½ÃÀû ±ÔÄ¢µé Ä«´Þ·Î±×¸¦ º¸·Á¸é
See section ¹¬½ÃÀû ±ÔÄ¢µéÀÇ Ä«´Þ·Î±×(Catalogue of Implicit Rules).
À§¿¡¼ ¿ì¸®´Â ÇϳªÀÇ ¹¬½ÃÀû ±ÔÄ¢ÀÌ, ¿ä±¸µÈ Á¾¼Ó¹°µéÀÌ "Á¸ÀçÇϰųª ¸¸µé¾îÁú ¼ö ÀÖÀ¸¸é" Àû¿ëµÈ´Ù°í ¸»Çß´Ù. ÆÄÀÏÀº ±×°ÍÀÌ maekefile¿¡¼ Ÿ°ÙÀ̳ª Á¾¼Ó¹°·Î ¸í½ÃÀûÀ¸·Î ÁöÁ¤µÇ°í ¹¬½ÃÀû ±ÔÄ¢ÀÌ ±×°ÍÀ» ¸¸µå´Â ¹æ¹ýÀ» Àç±ÍÀûÀ¸·Î ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù¸é, "¸¸µé¾îÁú ¼ö ÀÖ´Ù". ¹¬½ÃÀû Á¾¼Ó¹°ÀÌ ´Ù¸¥ ¹¬½ÃÀû ±ÔÄ¢ÀÇ °á°úÀ̶ó¸é ¿ì¸®´Â ¿¬¼âÀÛ¿ë(chaining)ÀÌ ÀϾ´Ù°í ¸»ÇÑ´Ù. See section ¹¬½ÃÀû ±ÔÄ¢ÀÇ ¿¬¼â(Chains of Implicit Rules).
ÀϹÝÀûÀ¸·Î make
´Â °¢ Ÿ°Ù¿¡ ´ëÇؼ ¸í·ÉÀÌ ¾ø´Â ¹¬½ÃÀû±ÔÄ¢, °¢
´õºí-ÄÝ·Ð ±ÔÄ¢À» °Ë»öÇÑ´Ù. Á¾¼Ó¹°·Î¸¸ ¾ð±ÞµÈ ÆÄÀÏÀº, Ÿ°ÙÀÇ ±ÔÄ¢ÀÌ
¾Æ¹«°Íµµ ÁöÁ¤ÇÏÁö ¾Ê´Â Ÿ°ÙÀ¸·Î »ý°¢µÇ°í, ±×·¡¼ ÀÌ°Í¿¡ ´ëÇÑ ¹¬½ÃÀû
±ÔÄ¢ÀÌ °Ë»öµÈ´Ù. °Ë»öÀÌ ÀÌ·ç¾îÁö´Â ¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº
See section ¹¬½ÃÀû ±ÔÄ¢ °Ë»ö ¾Ë°í¸®Áò(Implicit Rule Search Algorithm).
¸í½ÃÀû Á¾¼Ó¹°µéÀº ¹¬½ÃÀû ±ÔÄ¢ °Ë»ö¿¡ ¾Æ¹«·± ¿µÇâµµ ¹ÌÄ¡Áö ¾Ê´Â´Ù´Â Á¡¿¡ ÁÖ¸ñÇÏÀÚ. ¿¹¸¦ µé¾î¼ ´ÙÀ½°ú °°Àº ¸í½ÃÀû ±ÔÄ¢À» »ý°¢ÇÏÀÚ:
foo.o: foo.p
`foo.p'ÀÇ Á¾¼Ó¼ºÀº make
°¡ ¿ÀºêÁ§Æ® ÆÄÀÏ `.o' ÆÄÀÏ¿¡
´ëÇÑ ¹¬½ÃÀû ±ÔÄ¢¿¡ µû¶ó¼ ÆĽºÄ® ¼Ò½º ÆÄÀÏ `.p' ÆÄÀϷκÎÅÍ
`foo.o'¸¦ ¸®¸ÞÀÌÅ©ÇÒ °ÍÀÌ´Ù¶ó´Â °ÍÀ» ¹Ýµå½Ã ÀǹÌÇÏÁö ¾Ê´Â´Ù. ¿¹¸¦
µé¾î¼ `foo.c'°¡ ÀÌ¹Ì Á¸ÀçÇÏ°í C ¼Ò½º ÆÄÀϷκÎÅÍ ¿ÀºêÁ§Æ® ÆÄÀÏÀ»
¸¸µå´Â ¹¬½ÃÀû ±ÔÄ¢ÀÌ ´ë½Å »ç¿ëµÈ´Ù. ¿Ö³Ä¸é ÀÌ°ÍÀÌ »çÀü Á¤ÀÇµÈ ¹¬½ÃÀû
±ÔÄ¢µéÀÇ ¸®½ºÆ®¿¡¼ ÆĽºÄ®¿¡ ´ëÇÑ ±ÔÄ¢º¸´Ù ¸ÕÀú ³ª¿À±â ¶§¹®ÀÌ´Ù
(see section ¹¬½ÃÀû ±ÔÄ¢µéÀÇ Ä«´Þ·Î±×(Catalogue of Implicit Rules)).
¹¬½ÃÀû ±ÔÄ¢ÀÌ ¸í·ÉµéÀÌ ¾ø´Â Ÿ°Ù¿¡ ´ëÇؼ »ç¿ëµÇ±â¸¦ ¿øÇÏÁö ¾Ê´Â´Ù¸é Ÿ°Ù¿¡°Ô, ÇϳªÀÇ ¼¼¹ÌÄݷи¸ ÀÛ¼ºÇؼ ºó ¸í·ÉµéÀ» ÁÙ ¼ö ÀÖ´Ù (see section ºó ¸í·É »ç¿ëÇϱâ(Using Empty Commands)).
´ÙÀ½Àº makefileÀÌ À̵éÀ» ¸í½ÃÀûÀ¸·Î ¿À¹ö¶óÀ̵åÇϰųª Ãë¼ÒÇÏÁö ¾Ê¾Ò´Ù¸é Ç×»ó »ç¿ëÀÌ °¡´ÉÇÑ »çÀü¿¡ Á¤ÀÇµÈ ¹¬½ÃÀû ±ÔÄ¢µéÀÇ Ä«´Þ·Î±×ÀÌ´Ù. ¹¬½ÃÀû ±ÔÄ¢µéÀ» Ãë¼ÒÇϰųª ¿À¹ö¶óÀ̵åÇÏ´Â Á¤º¸¿¡ ´ëÇؼ See section ¹¬½ÃÀû ±ÔÄ¢ Ãë¼Ò½ÃÅ°±â(Canceling Implicit Rules). `-r'À̳ª `--no-builtin-rules' ¿É¼ÇÀº ¸ðµç »çÀü¿¡ Á¤ÀÇµÈ ±ÔÄ¢µéÀ» Ãë¼Ò½ÃŲ´Ù.
`-r' ¿É¼ÇÀÌ ÁÖ¾îÁöÁö ¾Ê¾Ò´ÙÇÏ´õ¶óµµ, ÀÌµé ±ÔÄ¢µé ¸ðµÎ°¡ Ç×»ó
Á¤ÀǵǴ °ÍÀº ¾Æ´Ï´Ù. ¸¹Àº »çÀü¿¡ Á¤ÀÇµÈ ±ÔÄ¢µéÀº make
¿¡¼
Á¢¹Ì»ç ±ÔÄ¢µé·Î ±¸ÇöµÈ´Ù. ±×·¡¼ À̵éÀº Á¢¹Ì»ç ¸®½ºÆ®(suffix
list)¿¡ ÀÇÁ¸ÀûÀ¸·Î Á¤ÀÇµÉ °ÍÀÌ´Ù (Ư¼öÇÑ Å¸°Ù .SUFFIXES
ÀÇ
Á¾¼Ó¹°µéÀÇ ¸®½ºÆ®). µðÆúÆ® Á¢¹Ì»ç ¸®½ºÆ®´Â ´ÙÀ½°ú °°´Ù:
.out
, .a
, .ln
, .o
, .c
, .cc
,
.C
, .p
, .f
, .F
, .r
, .y
,
.l
, .s
, .S
, .mod
, .sym
, .def
,
.h
, .info
, .dvi
, .tex
, .texinfo
,
.texi
, .txinfo
, .w
, .ch
.web
,
.sh
, .elc
, .el
. Á¾¼Ó¹°µéÀÌ ÀÌ·± Á¢¹Ì»çµé ÁßÀÇ
Çϳª¸¦ °¡Áö´Â ¾Æ·¡¿¡¼ ±â¼úµÈ ¹¬½ÃÀû ±ÔÄ¢µé ¸ðµÎ´Â ½ÇÁ¦·Î Á¢¹Ì»ç
±ÔÄ¢µéÀÌ´Ù. Á¢¹Ì»ç ¸®½ºÆ®¸¦ º¯°æÇÑ´Ù¸é ´ÜÁö È¿·Â ÀÖ´Â »çÀü¿¡ Á¤ÀÇµÈ Á¢¹Ì»ç
±ÔÄ¢µé¸¸ÀÌ ¿©·¯ºÐÀÌ ÁöÁ¤ÇÑ ¸®½ºÆ®¿¡ ÀÖ´Â Á¢¹Ì»çµé ÁßÀÇ Çϳª³ª µÑÀÇ
À̸§À» °¡Áö´Â °ÍµéÀÌ µÉ °ÍÀÌ´Ù; Á¢¹Ì»çµé Áß¿¡¼ ÀÌµé ¸®½ºÆ®¿¡ ÀÖÁö
¾Ê´Â ±ÔÄ¢µéÀº »ç¿ë ºÒ°¡´ÉÀÌ µÈ´Ù. Á¢¹Ì»ç ±ÔÄ¢µé¿¡ ´ëÇÑ »ó¼¼ÇÑ ³»¿ëÀº
See section ±¸´Ú´Ù¸® Á¢¹Ì»ç ±ÔÄ¢(Old-Fashioned Suffix Rules).
as
¸¦
½ÇÇàÇÔÀ¸·Î½á ÀÚµ¿À¸·Î ¸¸µé¾îÁø´Ù. Á¤È®ÇÑ ¸í·ÉÀº
`$(AS) $(ASFLAGS)'.
`n.s' ´Â C ¼±Çà 󸮱â cpp
¸¦ ½ÇÇàÇÔÀ¸·Î½á
`n.S' ÆÄÀϷκÎÅÍ ÀÚµ¿À¸·Î ¸¸µé¾îÁø´Ù. Á¤È®ÇÑ ¸í·ÉÀº
`$(CPP) $(CPPFLAGS)'.
ld
)¸¦ ½ÇÇàÇÔÀ¸·Î½á ÀÚµ¿À¸·Î ¸¸µé¾îÁø´Ù. Á¤È®ÇÑ ¸í·ÉÀº
`$(CC) $(LDFLAGS) n.o $(LOADLIBES)'.
ÀÌ ±ÔÄ¢Àº ´ÜÀÏ ¼Ò½º ÆÄÀÏÀ» °¡Áö´Â ´Ü¼øÇÑ ÇÁ·Î±×·¥¿¡ ´ëÇؼ Á¤È®ÇÑ °ÍÀ»
ÇÑ´Ù. ´Ù¼öÀÇ ¿ÀºêÁ§Æ® ÆÄÀϵéÀÌ ÀÖ´õ¶óµµ(¾Æ¸¶µµ ´Ù¾çÇÑ ´Ù¸¥ ¼Ò½º
ÆÄÀϵé·ÎºÎÅÍ ¿Â °Í) Á¤È®ÇÑ °ÍÀ» ÇàÇÒ °ÍÀÌ´Ù. À̵éÁß Çϳª´Â ½ÇÇà ÆÄÀÏÀÇ
À̸§°ú °°Àº À̸§À» °¡Áø´Ù. ±×·¡¼,
x: y.o z.o`x.c', `y.c' ±×¸®°í `z.c' ¸ðµÎ°¡ Á¸ÀçÇÒ ¶§ ´ÙÀ½À» ½ÇÇàÇÒ °ÍÀÌ´Ù:
cc -c x.c -o x.o cc -c y.c -o y.o cc -c z.c -o z.o cc x.o y.o z.o -o x rm -f x.o rm -f y.o rm -f z.oÁ» ´õ º¹ÀâÇÑ °æ¿ì, À̸§ÀÌ ½ÇÇà ÆÄÀϷκÎÅÍ À¯µµµÇ´Â ¿ÀºêÁ§Æ® ÆÄÀÏÀÌ ¾øÀ» ¶§, ¸µÅ©¸¦ À§Çؼ ¸í½ÃÀû ¸í·ÉÀ» ÀÛ¼ºÇØ¾ß ÇÑ´Ù. `.o' ¿ÀºêÁ§Æ® ÆÄÀϵé·Î ¸¸µé¾îÁö´Â °¢ Á¾·ùÀÇ ÆÄÀÏÀº ÄÄÆÄÀÏ·¯(`$(CC)', `$(FC)', ¶Ç´Â `$(PC)' ¸¦ »ç¿ëÇؼ ÀÚµ¿À¸·Î ¸µÅ©µÈ´Ù; C ÄÄÆÄÀÏ·¯ `$(CC)'´Â `-c' ¿É¼Ç ¾øÀÌ `.s' ÆÄÀϵéÀ» ¾î¼ÀºíÇÏ´Â µ¥ »ç¿ëµÈ´Ù. ÀÌ°ÍÀº `.o' ¿ÀºêÁ§Æ® ÆÄÀϵéÀ» Áß°£ ÆÄÀϵé·Î »ç¿ëÇÔÀ¸·Î½á ÀÌ·ç¾îÁø´Ù. ±×·¯³ª ÀÌ°ÍÀº ÇÑ ½ºÅÜÀ¸·Î ÄÄÆÄÀÏÇÏ°í ¸µÅ©ÇÏ´Â µ¥ ´õ ºü¸£´Ù. ÀÌ°ÍÀÌ ¾î¶»°Ô ÀÌ·ç¾îÁö´Â°¡ÀÌ´Ù.
make
°¡ Ưº°ÇÑ °æ¿ì¿¡ ÀÌ µÎ ¾ð¾îµé ÁßÀÇ ¾î¶² °ÍÀ» »ç¿ëÁßÀÎÁö
ÀÚµ¿À¸·Î °áÁ¤ÇÏ´Â °ÍÀ» ºÒ°¡´ÉÇÏ°Ô ¸¸µç´Ù. `.l' ÆÄÀϷκÎÅÍ
¿ÀºêÁ§Æ® ÆÄÀÏÀ» ´Ù½Ã ¸¸µé±â À§Çؼ make
°¡ È£ÃâµÇ¾ú´Ù¸é ÀÌ°ÍÀº
¾î¶² ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÒ °ÍÀΰ¡¸¦ ¹Ýµå½Ã ÃßÃøÇس»¾ß ÇÑ´Ù. C ÄÄÆÄÀÏ·¯¶ó°í
ÃßÃøÇس¾ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ¿Ö³Ä¸é ÀÌ°ÍÀÌ °¡Àå ÀϹÝÀûÀ̱â
¶§¹®ÀÌ´Ù. Ratfor¸¦ »ç¿ëÇÏ°í ÀÖ´Ù¸é make
°¡ ÀÌ°ÍÀ» ¾Ëµµ·Ï
`n.r'À» makefile¾È¿¡ ¾ð±ÞÇØ¾ß ÇÑ´Ù. ¶Ç´Â Ratfor¸¦ C ÆÄÀϵé
¾øÀÌ, ¹èŸÀûÀ¸·Î »ç¿ëÇÏ°í ÀÖ´Ù¸é ´ÙÀ½°ú °°ÀÌ Çؼ ¹¬½ÃÀû ±ÔÄ¢ Á¢¹Ì»ç
¸®½ºÆ®·ÎºÎÅÍ `.c'¸¦ Á¦°ÅÇ϶ó:
.SUFFIXES: .SUFFIXES: .o .r .f .l ...
lint
¸¦ ½ÇÇàÇؼ `n.c' ·ÎºÎÅÍ
¸¸µé¾îÁø´Ù. Á¤È®ÇÑ ¸í·ÉÀº `$(LINT) $(LINTFLAGS) $(CPPFLAGS)
-i'. `n.y' ³ª `n.l' ·ÎºÎÅÍ ¸¸µé¾îÁø C Äڵ忡
´ëÇؼ µ¿ÀÏÇÑ ¸í·ÉÀÌ »ç¿ëµÈ´Ù.
º¸Åë À§ÀÇ ÀÖ´Â Å×ÀÌºí¿¡ ³ª¿Â º¯¼öµé¸¸À» º¯°æÇÏ°íÀÚ ÇÒ °ÍÀÌ´Ù. À̵éÀº ´ÙÀ½ ¼½¼Ç¿¡¼ ¼³¸íµÈ´Ù.
±×·¯³ª ³»Àå ¹¬½Ã ±ÔÄ¢µé¿¡ ÀÖ´Â ¸í·ÉµéÀÌ ½ÇÁ¦·Î COMPILE.c
,
LINK.p
, ±×¸®°í PREPROCESS.S
¿Í °°Àº º¯¼öµéÀ»
»ç¿ëÇÑ´Ù. À̵éÀÇ °ªÀº À§¿¡ ³ª¿µÈ ¸í·ÉµéÀ» ´ã°í ÀÖ´Ù.
make
´Â, `.x' ¼Ò½º ÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ´Â ±ÔÄ¢Àº
COMPILE.x
¶ó´Â º¯¼ö¸¦ »ç¿ëÇÑ´Ù´Â °ü·Ê¸¦
»ç¿ëÇÑ´Ù. ºñ½ÁÇÏ°Ô `.x' ¶ó´Â ÆÄÀϷκÎÅÍ ½ÇÇà ÆÄÀϤ·¸£
¸¸µå´Â ±ÔÄ¢Àº LINK.x
¸¦ »ç¿ëÇÑ´Ù; `.x' ¸¦ ¼±Çà
ó¸®ÇÏ´Â ±ÔÄ¢Àº PREPROCESS.x
¸¦ »ç¿ëÇÑ´Ù.
¿ÀºêÁ§Æ® ÆÄÀÏÀ» »ý¼ºÇÏ´Â ¸ðµç ±ÔÄ¢µéÀº OUTPUT_OPTION
º¯¼ö¸¦
»ç¿ëÇÑ´Ù. make
´Â ÀÌ º¯¼ö¸¦ ÄÄÆÄÀÏ ¶§ÀÇ ¿É¼Ç¿¡ µû¶ó¼, `-o
$@'¸¦ ´ãµµ·Ï, ¶Ç´Â ºó °ÍÀÌ µÇµµ·Ï Á¤ÀÇÇÑ´Ù. VPATH
(see section Á¾¼Ó¹°À» À§ÇÑ µð·ºÅ丮 °Ë»ö(Searching Directories for Dependencies) ¸¦ »ç¿ëÇÒ ¶§¿Í ºñ½ÁÇÏ°Ô, ´Ù¸¥ µð·ºÅ丮¿¡
¼Ò½º°¡ ÀÖÀ» ¶§, °á°ú°¡ Á¤È®ÇÑ ÆÄÀÏ·Î °¡µµ·Ï Çϱâ À§Çؼ `-o'
¿É¼ÇÀ» »ç¿ëÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ±×·¯³ª, ¾î¶² ½Ã½ºÅ۵鿡¼ ÄÄÆÄÀÏ·¯µéÀº
¿ÀºêÁ§Æ® ÆÄÀϵ鿡 ´ëÇؼ `-o' ¿É¼ÇÀ» ¹Þ¾ÆµéÀÌÁö ¾Ê´Â´Ù. ±×·±
½Ã½ºÅÛÀ» »ç¿ëÇÏ°í ÀÖ´Ù¸é, VPATH
¸¦ »ç¿ëÇÑ´Ù¸é, ¾î¶² ÄÄÆÄÀÏÀº
±×µéÀÇ °á°ú¸¦ ´Ù¸¥ À§Ä¡¿¡´Ù ³õÀ» °ÍÀÌ´Ù. ÀÌ·± ¹®Á¦¿¡ ´ëÇÑ °¡´ÉÇÑ
ÇØ°á¹ý(workaround)Àº OUTPUT_OPTION
¿¡°Ô `; mv $*.o
$@' °ªÀ» ÁÖ´Â °ÍÀÌ´Ù.
³»Àå ¹¬½ÃÀû ±ÔÄ¢ÀÇ ¸í·ÉµéÀº ¾î¶² »çÀüÁ¤ÀÇµÈ º¯¼öµéÀ» ÀÚÀ¯·Ó°Ô
»ç¿ëÇÑ´Ù. ÀÌ·± º¯¼öµéÀ» makefile ¾È¿¡¼, make
¿¡ ´ëÇÑ
¸Å°³º¯¼öµé·Î, ¶Ç´Â ȯ°æ¿¡¼, ¹¬½ÃÀû ±ÔÄ¢µéÀ»
ÀçÁ¤ÀÇÇÏÁö ¾Ê°í¼ À̵éÀÌ ÀÛµ¿ÇÏ´Â ¹æ½ÄÀ» ¹Ù²Ù±â À§ÇØ, º¯°æÇÒ ¼ö ÀÖ´Ù.
¿¹¸¦ µé¾î¼ C ¼Ò½º ÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ´Â µ¥ »ç¿ëµÇ´Â ¸í·ÉÀº ½ÇÁ¦·Î `$(CC) -c $(CFLAGS) $(CPPFLAGS)' ÀÌ´Ù. »ç¿ëµÈ º¯¼öµéÀÇ ½ÇÁ¦ °ªµéÀº `cc'¿Í ¾Æ¹«°Íµµ ¾Æ´Ï±â ¶§¹®¿¡ °á±¹ `cc -c' ÀÌ µÈ´Ù. `CC' ¸¦ `ncc'·Î ÀçÁ¤ÀÇÇÔÀ¸·Î½á, `ncc' °¡ ¹¬½ÃÀû ±ÔÄ¢¿¡ ÀÇÇؼ ¼öÇàµÇ´Â ¸ðµç C ÄÄÆÄÀÏ¿¡ ´ëÇؼ »ç¿ëµÇµµ·Ï ÇÒ ¼ö ÀÖ´Ù. `CFLAGS' ¸¦ `-g' ·Î º¯°æÇؼ `-g' ¿É¼ÇÀ» °¢ ÄÄÆÄÀÏ¿¡ Àü´ÞÇÒ ¼ö ÀÖ´Ù. C ÄÄÆÄÀÏÀ» ¼öÇàÇÏ´Â ¸ðµç ¹¬½ÃÀû ±ÔÄ¢µéÀº `$(CC)' ¸¦ »ç¿ëÇÏ¿© ±× ÄÄÆÄÀÏ·¯ÀÇ ÇÁ·Î±×·¥ À̸§°ú ¸ðµç °ÍÀÌ ÄÄÆÄÀÏ·¯¿¡°Ô ÁÖ¾îÁø ¸Å°³º¯¼öµé ¾È¿¡ `$(CFLAGS)' ¸¦ Æ÷ÇÔÇÑ´Ù.
¹¬½ÃÀû ±ÔÄ¢µé¾È¿¡ »ç¿ëµÈ º¯¼öµéÀº µÎ°¡Áö Ŭ·¡½ºµé·Î ±¸ºÐµÈ´Ù;
ÇÁ·Î±×·¥µéÀÇ À̸§ÀÎ °Íµé(CC
¿Í °°ÀÌ)°ú, ÇÁ·Î±×·¥¿¡ ´ëÇÑ
¸Å°³º¯¼öµéÀ» ´ã°í ÀÖ´Â °Íµé(CFLAGS
¿Í °°ÀÌ). ("ÇÁ·Î±×·¥ÀÇ
À̸§" µµ ¶ÇÇÑ ¾î¶² ¸í·É ¸Å°³º¯¼öµéÀ» °¡Áú ¼ö ÀÖÁö¸¸ ÀÌ°ÍÀº ¹Ýµå½Ã
½ÇÁ¦ÀÇ ½ÇÇà ÇÁ·Î±×·¥ À̸§À¸·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.) Çϳª ÀÌ»óÀÇ º¯¼ö °ªÀ»
°¡Áø´Ù¸é ±×°ÍµéÀ» °ø¹é¹®ÀÚµé·Î ±¸ºÐÇ϶ó.
´ÙÀ½Àº ³»Àå ±ÔÄ¢µé ¾È¿¡¼ ÇÁ·Î±×·¥µéÀÇ À̸§À¸·Î »ç¿ëµÇ´Â º¯¼öµéÀ» ¸ðÀº Å×À̺íÀÌ´Ù:
AR
AS
CC
CXX
CO
CPP
FC
GET
LEX
PC
YACC
YACCR
MAKEINFO
TEX
TEXI2DVI
WEAVE
CWEAVE
TANGLE
CTANGLE
RM
´ÙÀ½Àº ÀÌ°ÍÀÇ °ªµéÀÌ À§¿¡ ÀÖ´Â ÇÁ·Î±×·¥µé¿¡ ´ëÇÑ Ãß°¡ÀÇ ¸Å°³º¯¼öµéÀÌ µÇ´Â º¯¼öµéÀ» ¸ðÀº Å×À̺íÀÌ´Ù. ÀÌ·± ¸ðµç °Íµé¿¡ ´ëÇÑ µðÆúÆ®´Â ´Ù¸¥ ¾ð±ÞÀÌ ¾ø´Ù¸é ºó ¹®ÀÚ¿ÀÌ´Ù.
ARFLAGS
ASFLAGS
CFLAGS
CXXFLAGS
COFLAGS
co
ÇÁ·Î±×·¥¿¡°Ô ÁÖ¾îÁö´Â ¿©ºÐÀÇ Ç÷¡±×.
CPPFLAGS
FFLAGS
GFLAGS
get
ÇÁ·Î±×·¥¿¡ ÁÖ¾îÁö´Â ¿©ºÐÀÇ Ç÷¡±×.
LDFLAGS
LFLAGS
PFLAGS
RFLAGS
YFLAGS
¶§¶§·Î ¾î¶² ÆÄÀÏÀº ¹¬½ÃÀû ±ÔÄ¢µéÀ» ¼øÂ÷ÀûÀ¸·Î Àû¿ëÇؼ ¸¸µé¾îÁú ¼ö
ÀÖ´Ù. ¿¹¸¦ µé¾î¼ `n.o' ¶ó´Â ÆÄÀÏÀº ¸Ç¸ÕÀú Yacc ¸¦ ½ÇÇàÇÏ°í
±× ´ÙÀ½ cc
¸¦ ½ÇÇàÇؼ, `n.y'·ÎºÎÅÍ ¸¸µé¾îÁú ¼ö
ÀÖ´Ù. ÀÌ·± ½ÃÄö½º´Â ¿¬¼â(chain) ¶ó°í ºÒ¸°´Ù.
`n.c' ÀÌ Á¸ÀçÇÑ´Ù¸é, ¶Ç´Â makefile ¿¡¼ ¾ð±ÞµÇ¾ú´Ù¸é, ¾î¶²
Ư¼öÇÑ °Ë»öµµ ÇÊ¿äÇÏÁö ¾Ê´Ù; make
´Â `n.c' ·ÎºÎÅÍ C
ÄÄÆÄÀÏÀ» ÅëÇؼ ¿ÀºêÁ§Æ® ÆÄÀÏÀÌ ¸¸µé¾îÁú ¼ö ÀÖ´Ù´Â °ÍÀ» ¾È´Ù; ³ªÁß¿¡
`n.c' ¸¦ ¸¸µå´Â ¹æ¹ýÀ» »ý°¢ÇÒ ¶§, Yacc ¸¦ ½ÇÇàÇϱâ À§ÇÑ
±ÔÄ¢ÀÌ »ç¿ëµÈ´Ù. °á±¹ µÎ `n.c' °ú `n.o' ÀÌ
°»½ÅµÈ´Ù.
±×·¯³ª `n.c' ÀÌ Á¸ÀçÇÏÁö ¾Ê°í ¾ð±ÞµÇÁöµµ ¾Ê¾Ò´ÙÇÏ´õ¶óµµ,
make
´Â ±×°ÍÀÌ `n.o' °ú `n.y' »çÀÌ¿¡¼
²ú±ä °í¸®¶ó´Â °ÍÀ» ¾È´Ù. ÀÌ·± °æ¿ì `n.c' ´Â Áß°£
ÆÄÀÏ(intermediate file) À̶ó°í ºÒ¸°´Ù. ÀÏ´Ü make
°¡ Áß°£ ÆÄÀÏÀ»
»ç¿ëÇϱâ·Î °áÁ¤ÇÏ¿´´Ù¸é ÀÌ°ÍÀº ¸¶Ä¡ makefile¾È¿¡¼ ¾ð±ÞµÈ °Íó·³,
±×°ÍÀ» »ý¼ºÇÏ´Â ¹¬½ÃÀû ±ÔÄ¢°ú ÇÔ²² µ¥ÀÌÅͺ£À̽º¿¡ ³Ö¾îÁö°Ô µÈ´Ù.
Áß°£ ÆÄÀϵéÀº ¸ðµç ´Ù¸¥ ÆÄÀϵéó·³ ±×µéÀÇ ±ÔÄ¢À» »ç¿ëÇؼ ´Ù½Ã ¸¸µé¾îÁø´Ù. ±×·¯³ª Áß°£ ÆÄÀϵéÀº ´ÙÀ½°ú °°Àº µÎ°¡Áö ¹æ½ÄÀ¸·Î ´Ù¸£°Ô Ãë±ÞµÈ´Ù.
ù¹ø° ´Ù¸¥Á¡Àº, Áß°£ ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾ÊÀ» ¶§ ÀϾ´Â °ÍÀÌ´Ù. ÀϹÝ
Æθ® b °¡ Á¸ÀçÇÏÁö ¾Ê°í make
°¡ b ¿¡ Á¾¼ÓÀûÀÎ
Ÿ°ÙÀ» »ý°¢ÇÑ´Ù¸é ÀÌ°ÍÀº Ç×»ó b¸¦ »ý¼ºÇÑ ´ÙÀ½ b·ÎºÎÅÍ ±×
Ÿ°ÙÀ» °»½ÅÇÑ´Ù. ±×·¯³ª b°¡ Áß°£ ÆÄÀÏÀ̶ó¸é make
´Â ±×´ë·Î
µÑ ¼öµµ ÀÖ´Ù. ÀÌ°ÍÀº b ¶Ç´Â ±Ã±ØÀûÀÎ
Ÿ°ÙÀ», bÀÇ ¾î¶² Á¾¼Ó¹°µµ Ÿ°Ùº¸´Ù ´õ »õ·Î¿î °ÍÀÌ ¾Æ´Ï°Å³ª
±× Ÿ°ÙÀ» °»½ÅÇÒ
¾î¶² ´Ù¸¥ ÀÌÀ¯°¡ ¾ø´Ù¸é, °»½ÅÇÏ·Á°í ÇÏÁö ¾Ê´Â´Ù.
µÎ¹ø° ´Ù¸¥Á¡Àº, make
°¡ ¾î¶² ´Ù¸¥ °ÍÀ» °»½ÅÇϱâ À§Çؼ
b¸¦ »ý¼ºÇÑ´Ù¸é, ÀÌ°ÍÀÌ ´õÀÌ»ó ÇÊ¿ä¾øÀ» ¶§ b¸¦
Áö¿î´Ù´Â °ÍÀÌ´Ù. ±×·¯¹Ç·Î make
ÀÌÀü¿¡ Á¸ÀçÇÏÁö ¾Ê´ø Áß°£ ÆÄÀÏÀº
make
ÀÌÈÄ¿¡µµ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. make
´Â ¾î¶² ÆÄÀÏÀÌ
»èÁ¦µÇ°í Àִ°¡¸¦ º¸¿©ÁÖ´Â `rm -f' ¸í·ÉÀ»
ÀμâÇÔÀ¸·Î½á ±× »èÁ¦ »ç½ÇÀ» ¿©·¯ºÐ¿¡°Ô º¸°íÇÑ´Ù.
ÀϹÝÀûÀ¸·Î ¾î¶² ÆÄÀÏÀº ÀÌ°ÍÀÌ makefile¿¡¼ Ÿ°ÙÀ̳ª Á¾¼Ó¹°·Î
¾ð±ÞµÈ´Ù¸é Áß°£ ÆÄÀÏÀÌ µÉ ¼ö ¾ø´Ù. ±×·¯³ª Ư¼ö Ÿ°Ù
.INTERMEDIATE
ÀÇ Á¾¼Ó¹° ¸®½ºÆ®¿¡ ³Ö¾î¼ ¾î¶² ÆÄÀÏÀ» ¸í½ÃÀûÀ¸·Î
Áß°£ ÆÄÀÏ·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ±× ÆÄÀÏÀÌ ¾î¶² ´Ù¸¥ ½ÄÀ¸·Î
¾ð±ÞµÇ¾ú´Ù ÇÏ´õ¶óµµ È¿·ÂÀ» ¹ßÈÖÇÑ´Ù.
Áß°£ ÆÄÀÏÀÇ ÀÚµ¿ »èÁ¦¸¦ ±× ÆÄÀÏÀ» ÀÌÂ÷(secondary) ÆÄÀÏ·Î
ÁöÁ¤ÇÔÀ¸·Î½á ¸·À» ¼ö ÀÖ´Ù. ÀÌ·¸°Ô Çϱâ À§Çؼ ÀÌ°ÍÀ» Ư¼ö Ÿ°Ù
.SECONDARY
ÀÇ Á¾¼Ó¹° ¸®½ºÆ®¿¡ ³ÖÀ¸¸é µÈ´Ù. ¾î¶² ÆÄÀÏÀÌ
ÀÌÂ÷À̶ó¸é make
´Â ±× ÆÄÀÏÀÌ »çÀü¿¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù´Â ÀÌÀ¯
Çϳª¸¸À¸·Î
»ý¼ºÇÏÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ±×·¯³ª make
´Â ±× ÆÄÀÏÀ» ÀÚµ¿À¸·Î Áö¿ìÁö
¾Ê´Â´Ù. ¾î¶² ÆÄÀÏÀ» ÀÌÂ÷·Î ÁöÁ¤ÇÏ´Â °ÍÀº ±×°ÍÀ» ¶ÇÇÑ Áß°£ ÆÄÀÏ·Î
ÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù.
¹¬½ÃÀû ±ÔÄ¢(`%.o'¿Í °°Àº) ÀÇ Å¸°Ù ÆÐÅÏÀ» Ư¼ö Ÿ°Ù
.PRECIOUS
ÀÇ Á¾¼Ó¹°·Î ÁöÁ¤Çؼ Ÿ°Ù ÆÐÅÏÀÌ ±× ÆÄÀÏÀÇ À̸§°ú
ÀÏÄ¡ÇÏ´Â ¹¬½ÃÀû ±ÔÄ¢µé¿¡ ÀÇÇؼ ¸¸µé¾îÁø Áß°£ ÆÄÀϵéÀ» º¸Á¸ÇÒ ¼ö
ÀÖ´Ù. section make
¸¦ ÀÎÅÍ·´Æ® ¶Ç´Â Á×À̱â(Interrupting or Killing make
) ÂüÁ¶.
ÇϳªÀÇ ¿¬¼â°¡ µÎ°³º¸´Ù ¸¹Àº ¹¬½ÃÀû ±ÔÄ¢µéÀ» °¡Áö°í ÀÖÀ» ¼ö ÀÖ´Ù. ¿¹¸¦
µé¾î¼ RCS, Yacc, ±×¸®°í cc
¸¦ ½ÇÇàÇؼ `RCS/foo.y,v'
·ÎºÎÅÍ `foo' ¸¦ ¸¸µå´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ¿©±â¼ µÎ ÆÄÀÏ `foo.y'
°ú `foo.c' ÀÌ ¸¶Áö¸·¿¡ Áö¿öÁö´Â Áß°£ ÆÄÀϵåÀÌ´Ù.
¾î¶² ¹¬½ÃÀû ±ÔÄ¢µµ ¿¬¼â¿¡¼ µÎ¹ø ÀÌ»ó ³ªÅ¸³¯ ¼ö ¾ø´Ù. ÀÌ°ÍÀº
make
°¡ ¸µÄ¿¸¦ µÎ¹ø ½ÇÇàÇؼ `foo.o.o' ·ÎºÎÅÍ `foo'¸¦
¸¸µå´Â °Í°ú °°Àº ÀÌ»óÇÑ ÀÏÀ» »ý°¢ÇÏÁö ¾ÊÀ» °ÍÀ̶ó´Â °ÍÀ»
ÀǹÌÇÑ´Ù. ÀÌ·± Á¦¾àÀº ¹¬½ÃÀû ±ÔÄ¢ ¿¬¼â¸¦ ãÀ¸¸é¼ ¹«ÇÑ ·çÇÁ¿¡ ºüÁö´Â
°ÍÀ» ¸·´Â ¶Ç´Ù¸¥ ÀåÁ¡À» °¡Áø´Ù.
±×·¸Ä¡ ¾Ê´Ù¸é ±ÔÄ¢ ¿¬¼âµé¿¡ ÀÇÇؼ 󸮵É, ¾î¶² °æ¿ìµéÀ» ÃÖÀûÈÇÏ´Â
¸î°¡Áö Ư¼ö ¹¬½ÃÀû ±ÔÄ¢µéÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î¼ `foo'¸¦
`foo.c' ·ÎºÎÅÍ ¸¸µå´Â °ÍÀº file{foo.o} ¸¦ Áß°£ ÆÄÀÏ·Î »ç¿ëÇؼ,
ºÐ¸®µÈ ¿¬¼â ±ÔÄ¢µé·Î ÄÄÆÄÀÏµÇ°í ¸µÅ©µÊÀ¸·Î½á ó¸®µÉ ¼ö ÀÖÀ»
°ÍÀÌ´Ù. ±×·¯³ª ÀÌ·± °æ¿ì ½ÇÁ¦·Î ÀϾ´Â °ÍÀº ´ÜÀÏ cc
¸í·ÉÀ¸·Î
ÄÄÆÄÀÏ°ú ¸µÅ©¸¦ °°ÀÌ ¼öÇàÇϴ Ư¼öÇÑ ±ÔÄ¢ ÇϳªÀÌ´Ù. ÀÌ·± ÃÖÀûȵÈ
±ÔÄ¢Àº ±ÔÄ¢µéÀÇ ¼ø¼¿¡¼ Á» ´õ ¸ÕÀú ¿À±â ¶§¹®¿¡ ½ºÅÜ-¹ÙÀÌ-½ºÅÜ
¿¬¼âº¸´Ù ´õ ¿ì¼± Àû¿ëµÈ´Ù.
¿©·¯ºÐÀº ÆÐÅÏ ±ÔÄ¢(pattern rule) À» ÀÛ¼ºÇؼ ¹¬½ÃÀû ±ÔÄ¢À» Á¤ÀÇÇÑ´Ù. ÆÐÅÏ ±ÔÄ¢Àº ÀÏ¹Ý ±ÔÄ¢°ú, ÀÌ°ÍÀÇ Å¸°ÙÀÌ `%' (±×µéÁß Á¤È®È÷ ÇÑ°³) ¹®ÀÚ¸¦ °¡Áö°í ÀÖ´Ù´Â Á¡À» Á¦¿ÜÇÏ°í´Â, µ¿ÀÏÇÏ´Ù. ÀÌ Å¸°ÙÀº ÆÄÀÏ À̸§µé°ú ÀÏÄ¡ÇÏ´Â ÆÐÅÏÀ¸·Î »ý°¢µÈ´Ù; `%'´Â ºó ¼ºê¹®ÀÚ¿ÀÌ ¾Æ´Ï¶ó¸é ¹«¾ù°úµµ ÀÏÄ¡ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ¹Ý¸é¿¡ ´Ù¸¥ ¹®ÀÚµéÀº ±×µé Àڽŵé°ú¸¸ ÀÏÄ¡ÇÑ´Ù. ±×µéÀÌ À̸§µéÀÌ Å¸°Ù À̸§°ú °ü·ÃµÈ ¹æ¹ýÀ» º¸¿©ÁÖ±â À§Çؼ Á¾¼Ó¹°µéÀº `%'¸¦ »ç¿ëÇÑ´Ù.
±×·¡¼ `%.o : %.c' ¶ó´Â ÆÐÅÏ ±ÔÄ¢Àº ÆÄÀÏ `stem.c' ·ÎºÎÅÍ `stem.o' ¶ó´Â ÆÄÀÏÀ» ¸¸µå´Â ¹æ¹ýÀ» ¸»ÇÑ´Ù.
`%' À» ÆÐÅÏ ±ÔÄ¢µé¿¡¼ »ç¿ëÇÑ È®ÀåÀÌ, makefileÀÌ ÀÐÈú ¶§ ¹ß»ýÇÏ´Â ´Ù¸¥ º¯¼ö³ª ÇÔ¼ö È®Àå ÈÄ¿¡ ¹ß»ýµÇ´Â °Í¿¡ ÁÖÀÇÇÏÀÚ. See section º¯¼ö »ç¿ë ¹æ¹ý(How to Use Variables), ±×¸®°í section ÅؽºÆ® º¯È¯À» À§ÇÑ ÇÔ¼ö(Functions for Transforming Text).
ÆÐÅÏ ±ÔÄ¢Àº Ÿ°Ù ¾È¿¡ `%' ¹®ÀÚ (Á¤È®È÷ ±×µé Áß Çϳª) ¸¦ ´ã°í ÀÖ´Ù; ±×·¸Áö ¾ÊÀ¸¸é ÀÌ°ÍÀº ÀÏ¹Ý ±ÔÄ¢°ú ¿ÏÀüÈ÷ ¶È°°ÀÌ º¸ÀÏ °ÍÀÌ´Ù. Ÿ°ÙÀº ÆÄÀÏÀ̸§µé°ú ÀÏÄ¡ÇÏ´Â ÆÐÅÏÀÌ´Ù; `%' ´Â ÀÓÀÇÀÇ ºó °ÍÀÌ ¾Æ´Ñ ºÎºÐ¹®ÀÚ¿°ú ÀÏÄ¡ÇÏ°í ´Ù¸¥ ¹®ÀÚµéÀº ±×µé Àڽŵé°ú¸¸ ÀÏÄ¡ÇÑ´Ù.
¿¹¸¦ µé¾î¼, ÆÐÅÏÀ¸·Î½á `%.c' ´Â `.c'·Î ³¡³ª´Â ÀÓÀÇÀÇ ÆÄÀÏ À̸§°ú ÀÏÄ¡ÇÑ´Ù. ÆÐÅÏÀ¸·Î½á `s.%.c' ´Â `s.' ·Î ½ÃÀÛÇÏ°í `.c' ·Î ³¡³ª¸ç Àû¾îµµ ´Ù¼¸°³ÀÇ ¹®ÀÚ ÀÌ»óÀ¸·Î ÀÌ·ç¾îÁø ÀÓÀÇÀÇ ÆÄÀÏ À̸§°ú ÀÏÄ¡ÇÑ´Ù. (`%' ¿Í ÀÏÄ¡ÇÏ´Â ¹®ÀÚ°¡ Àû¾îµµ Çϳª ÀÖ¾î¾ß ÇÑ´Ù.) `%' ¿Í ÀÏÄ¡ÇÏ´Â ºÎºÐ¹®ÀÚ¿Àº ÁÙ±â(stem) À̶ó°í ºÒ¸°´Ù.
ÆÐÅÏ ±ÔÄ¢ÀÇ Á¾¼Ó¹° ¾È¿¡ ÀÖ´Â `%' ´Â Ÿ°Ù¿¡¼ `%' ¿Í ÀÏÄ¡ÇÑ °Í°ú µ¿ÀÏÇÑ ÁÙ±â(stem) À» ³ªÅ¸³½´Ù. ÆÐÅÏ ±ÔÄ¢ÀÌ Àû¿ëµÇ±â À§Çؼ ±×°ÍÀÇ Å¸°Ù ÆÐÅÏÀº ±× ÆÄÀÏ À̸§°ú ¹Ýµå½Ã ÀÏÄ¡ÇØ¾ß ÇÏ¸ç ±×°ÍÀÇ Á¾¼Ó¹° ÆÐÅÏÀº ¹Ýµå½Ã Á¸ÀçÇϰųª ¸¸µé¾îÁú ¼ö ÀÖ´Â ÆÄÀϵéÀÇ À̸§À» °®°í ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ·± ÆÄÀϵéÀº ±× Ÿ°ÙÀÇ Á¾¼Ó¹°µéÀÌ µÈ´Ù.
±×·¡¼ ´ÙÀ½°ú °°Àº ÇüÅÂÀÇ ±ÔÄ¢Àº
%.o : %.c ; command...
`n.o' ¸¦, `n.c' ÆÄÀÏÀÌ Á¸ÀçÇϰųª ¸¸µé¾îÁú ¼ö ÀÖ´Ù¸é Á¾¼Ó¹° `n.c' ÆÄÀÏÀ» °¡Áö°í ¸¸µå´Â ¹æ¹ýÀ» ÁöÁ¤ÇÑ´Ù.
`%' ¸¦ »ç¿ëÇÏÁö ¾Ê´Â Á¾¼Ó¹°µéÀÌ ÀÖÀ» ¼ö ÀÖ´Ù; ±×·± Á¾¼Ó¹°Àº ÀÌ·± ÆÐÅÏ ±ÔÄ¢¿¡ ÀÇÇؼ ¸¸µé¾îÁø ¸ðµç ÆÄÀϵ鿡 ÷ºÎµÈ´Ù. ÀÌ·± º¯ÇÏÁö ¾Ê´Â Á¾¼Ó¹°µéÀº Á¾Á¾ À¯¿ëÇÏ´Ù.
ÆÐÅÏ ±ÔÄ¢Àº `%' ¸¦ ´ã°í ÀÖ´Â Á¾¼Ó¹°µéÀ» ¹Ýµå½Ã °¡Áú ÇÊ¿ä°¡ ¾ø´Ù. ¶Ç´Â ½ÇÁ¦ ¾Æ¹«·± Á¾¼Ó¹°À» ¾È°¡Á®µµ µÈ´Ù. ±×·± ±ÔÄ¢Àº È¿À²ÀûÀ¸·Î ÀÏ¹Ý ¿ÍÀϵå Ä«µå°¡ µÈ´Ù. ÀÌ°ÍÀº Ÿ°Ù ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â ÀÓÀÇÀÇ ÆÄÀÏÀ» ¸¸µå´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. See section ÃÖÈÄÀÇ µðÆúÆ® ±ÔÄ¢ Á¤ÀÇ(Defining Last-Resort Default Rules).
ÆÐÅÏ ±ÔÄ¢µéÀº ÇÑ°¡Áö Ÿ°Ù ÀÌ»ó °¡Áú ¼ö ÀÖ´Ù. ÀÏ¹Ý ±ÔÄ¢µé°ú´Â ´Ù¸£°Ô
ÀÌ·± °ÍÀº µ¿ÀÏÇÑ Á¾¼Ó¹°µé°ú ¸í·ÉµéÀ» °¡Áø ´Ù¸¥ ¸¹Àº ±ÔÄ¢µé°ú ´Ù¸£°Ô
ÀÛµ¿ÇÑ´Ù. ¾î¶² ÆÐÅÏ ±ÔÄ¢ÀÌ ´Ù¼öÀÇ Å¸°ÙµéÀ» °¡Áø´Ù¸é, make
´Â ±×
±ÔÄ¢ÀÇ ¸í·ÉµéÀÌ ±× Ÿ°Ùµé ¸ðµÎ¸¦ ¸¸µå´Â Ã¥ÀÓÀÌ ÀÖ´Ù°í
ÀÌÇØÇÑ´Ù. ¸íµéµéÀº Ÿ°Ùµé ÀüºÎ¸¦ ¸¸µé±â À§Çؼ ´Ü Çѹø¸¸
½ÇÇàµÈ´Ù. Ÿ°Ù°ú ÀÏÄ¡ÇÏ´Â ÆÐÅÏ ±ÔÄ¢À» °Ë»öÇÒ ¶§, ±ÔÄ¢À» ÇÊ¿ä·Î Çϴ Ÿ°Ù°ú
ÀÏÄ¡ÇÏ´Â °Í(±ÔÄ¢)°ú ´Ù¸¥ ±ÔÄ¢ÀÇ Å¸°Ù ÆÐÅϵéÀÌ ÈçÈ÷ ÀÖ´Ù: make
´Â ÇöÀç ¹®Á¦°¡ µÇ´Â ÆÄÀÏ¿¡ ¸í·Éµé°ú Á¾¼Ó¹°µéÀ» ÁÖ´Â °Í¿¡ ´ëÇؼ¸¸
½Å°æÀ» ¾´´Ù. ±×·¯³ª ÀÌ ÆÄÀÏÀÇ ¸í·ÉµéÀÌ ½ÇÇàÁßÀÏ ¶§ ´Ù¸¥ Ÿ°ÙµéÀº ±×µé
ÀÚ½ÅÀÌ °»½ÅµÈ °Íó·³ ¸¶Å·µÈ´Ù.
ÆÐÅÏ ±ÔÄ¢µéÀÌ makefile ¿¡¼ ³ªÅ¸³ª´Â ¼ø¼´Â ¾ÆÁÖ Áß¿äÇÏ´Ù. ¿Ö³Ä¸é ÀÌ°ÍÀÌ ¹Ù·Î ±×µéÀÌ »ý°¢µÇ¾îÁö´Â ¼ø¼À̱⠶§¹®ÀÌ´Ù. µ¿ÀÏÇÏ°Ô Àû¿ë°¡´ÉÇÑ ±ÔÄ¢µé Áß¿¡¼ ´ÜÁö ¸ÇóÀ½ ã¾ÆÁø °Í¸¸ÀÌ »ç¿ëµÈ´Ù. ¿©·¯ºÐÀÌ ÀÛ¼ºÇÑ ±ÔÄ¢µéÀº ³»ÀåµÈ ±ÔÄ¢µéº¸´Ù ´õ ¿ì¼±ÇÑ´Ù. ±×·¯³ª Á¾¼Ó¹°µéÀÌ ½ÇÁ¦·Î Á¸ÀçÇϰųª ¾ð±ÞµÈ ±ÔÄ¢Àº Ç×»ó, ´Ù¸¥ ¹¬½ÃÀû ±ÔÄ¢µé¿¡ ÀÇÇؼ ¹Ýµå½Ã ¸¸µé¾îÁ®¾ß ÇÏ´Â Á¾¼Ó¹°µéÀ» °¡Áø ±ÔÄ¢º¸´Ù ¿ì¼±ÇÑ´Ù´Â °ÍÀ» ÁÖÀÇÇÏÀÚ.
´ÙÀ½Àº make
¿¡ ÀÇÇؼ ½ÇÁ¦·Î ¹Ì¸® Á¤ÀÇµÈ ÆÐÅÏ ±ÔÄ¢µéÀÇ ¸î°¡Áö
¿¹Á¦µéÀÌ´Ù. ¸ÕÀú `.c' ÆÄÀϵéÀ» `.o' ·Î ÄÄÆÄÀÏÇÏ´Â ±ÔÄ¢Àº:
%.o : %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
ÀÌ°ÍÀº `x.c' À¸·ÎºÎÅÍ `x.o' ÆÄÀÏÀ» ¸¸µé¼ö ÀÖ´Â ±ÔÄ¢À» Á¤ÀÇÇÑ´Ù. ¸í·ÉÀº ±ÔÄ¢ÀÌ Àû¿ëµÉ ¶§¸¶´Ù Ÿ°Ù ÆÄÀÏ À̸§µé°ú ¼Ò½º ÆÄÀÏ À̸§µéÀ» ´ëÀÔÇϱâ À§ÇÑ ÀÚµ¿ º¯¼öµé `$@' °ú `$<' ¸¦ »ç¿ëÇÏ°í ÀÖ´Ù. (see section ÀÚµ¿ º¯¼öµé(Automatic Variables)).
´ÙÀ½Àº µÎ¹ø° ³»Àå ±ÔÄ¢ÀÌ´Ù:
% :: RCS/%,v $(CO) $(COFLAGS) $<
ÀÌ°ÍÀº ¼ºêµð·ºÅ丮 `RCS' ¿¡¼ ´ëÀÀÇÏ´Â ÆÄÀÏ `x,v' ·ÎºÎÅÍ `x' ÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Â ±ÔÄ¢À» Á¤ÀÇÇÑ´Ù. Ÿ°ÙÀÌ `%' À̱⠶§¹®¿¡ ÀÌ ±ÔÄ¢Àº, ÀûÀýÇÑ Á¾¼Ó ÆÄÀÏÀÌ Á¸ÀçÇÑ´Ù¸é, ÀÓÀÇÀÇ ÆÄÀÏ ¹«¾ù¿¡³ª ¿ëµÉ °ÍÀÌ´Ù. ´õºí ÄÝ·Ð Àº ÀÌ ±ÔÄ¢À» terminal ·Î ¸¸µç´Ù. terminal À̶õ ±×°ÍÀÇ Á¾¼Ó¹°ÀÌ Áß°£ ÆÄÀÏÀÌ ¾Æ´Ï¾î¾ß ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. (see section ÀÓÀÇÀÇ °Í°úµµ ÀÏÄ¡ÇÏ´Â ÆÐÅÏ ±ÔÄ¢(Match-Anything Pattern Rules)).
´ÙÀ½ ÆÐÅÏ ±ÔÄ¢Àº ´ÙÀ½°ú °°Àº µÎ Ÿ°ÙµéÀ» °¡Áø´Ù:
%.tab.c %.tab.h: %.y bison -d $<
ÀÌ°ÍÀº make
¿¡°Ô `bison -d x.y' ¸í·ÉÀÌ
`x.tab.c' °ú `x.tab.h' µÑ´Ù make Ç϶ó°í ¸»ÇÏ´Â
°ÍÀÌ´Ù. `foo' °¡ `parse.tab.o' °ú `scan.o' ¿¡
Á¾¼ÓÀûÀÌ°í `scan.o' ÆÄÀÏÀÌ `parse.tab.h' ¿¡ Á¾¼ÓÀûÀ̸é,
`parse.y' ÆÄÀÏÀÌ º¯°æµÉ ¶§, `bison -d parse.y' ÀÌ ´Ü ¤¿¤¤¹ø
½ÇÇàµÉ °ÍÀÌ°í µÎ ÆÄÀÏ `parse.tab.o', `scan.o' ÀÇ Á¾¼Ó¼ºµéÀÌ
¸¸Á·µÉ °ÍÀÌ´Ù. (¾Æ¸¶ `parse.tab.o' ÆÄÀÏÀÌ `parse.tab.c'
·ÎºÎÅÍ ±×¸®°í `scan.o' ÆÄÀÏÀÌ `scan.c' ·ÎºÎÅÍ ÀçÄÄÆÄÀÏ µÉ
°ÍÀÌ°í `foo' ÆÄÀÏÀº `parse.tab.o', `scan.o', ±×¸®°í
´Ù¸¥ Á¾¼Ó¹°µé·Î ¸µÅ©µÉ °ÍÀ̸ç ÀÌ°ÍÀº ±×¸®°í ³ª¼ ÇØÇÇÇÏ°Ô ½ÇÇàµÉ
°ÍÀÌ´Ù.)
`.c' ÆÄÀÏÀ» `.o' ÆÄÀÏ·Î ÄÄÆÄÀÏÇÏ´Â ÆÐÅÏ ±ÔÄ¢À» ÀÛ¼ºÇÏ°í ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ: ±×·¸´Ù¸é ¾î¶»°Ô `cc' ¸í·ÉÀÌ ÀûÀýÇÑ ¼Ò½º ÆÄÀÏ¿¡ ´ëÇؼ ÀÛµ¿Çϵµ·Ï ÀÛ¼ºÇÒ °ÍÀΰ¡? ±× ¼Ò½º ÆÄÀÏ À̸§À» ¸í·É¿¡ ¾µ ¼ö ¾ø´Ù. ¿Ö³Ä¸é ±× À̸§Àº ¹¬½ÃÀû ±ÔÄ¢ÀÌ Àû¿ëµÇ´Â ¶§¸¶´Ù ´Ù¸¦ °ÍÀ̱⠶§¹®ÀÌ´Ù.
ÇؾßÇÒ ÀÏÀº make
ÀÇ Æ¯¼ö ±â´É, ÀÚµ¿ º¯¼ö(automatic
variables) ¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ·± º¯¼öµéÀº ½ÇÇàµÇ´Â °¢ ±ÔÄ¢¿¡
´ëÇؼ ¸Å¹ø »õ·Ó°Ô, ±ÔÄ¢ÀÇ Á¾¼Ó¹°µé°ú Ÿ°Ù¿¡ ±â¹ÝÇؼ ´Ù½Ã °è»êµÇ´Â
°ªÀ» °¡Áø´Ù. ÀÌ ¿¹¿¡¼ `$@' ¸¦ ¿ÀºêÁ§Æ® ÆÄÀÏ À̸§¿¡ ´ëÇؼ
±×¸®°í `$<' ¸¦ ¼Ò½º ÆÄÀÏ À̸§¿¡ ´ëÇؼ »ç¿ëÇÏ¸é µÉ °ÍÀÌ´Ù.
´ÙÀ½Àº ÀÚµ¿ º¯¼öµéÀ» ¸ð¾Æº» Å×À̺íÀÌ´Ù:
$@
$%
make
»ç¿ëÇϱâ(Using make
to Update Archive Files))ÀÏ ¶§, Ÿ°Ù ¸â¹ö À̸§. ¿¹¸¦ µé¾î¼
Ÿ°ÙÀÌ `foo.a(bar.o)'À̸é `$%'´Â `bar.o'ÀÌ°í `$@'´Â
`foo.a'ÀÌ´Ù. Ÿ°ÙÀÌ ¾ÆÄ«ÀÌºê ¸â¹ö°¡ ¾Æ´Ï¸é `$%'´Â ºó °ÍÀÌ
µÈ´Ù.
$<
$?
make
»ç¿ëÇϱâ(Using make
to Update Archive Files)).
$^
make
»ç¿ëÇϱâ(Using make
to Update Archive Files)). Ÿ°ÙÀº ÀÌ°ÍÀÌ ÀÇÁ¸ÇÏ´Â ´Ù¸¥ °¢ ÆÄÀϵ鿡 ´ëÇؼ °¢
ÆÄÀÏÀÌ Á¾¼Ó¹° ¸®½ºÆ®¿¡¼ ¸î¹øÀ̳ª ³ª¿Ô´Â°¡¿¡ »ó°ü¾øÀÌ, µü Çѹø¸¸
»ç¿ëÇÑ´Ù. ±×·¡¼ ¾î¶² Ÿ°ÙÀ» À§Çؼ Çѹø ÀÌ»ó Á¾¼Ó¹°À» »ç¿ëÇÑ´Ù¸é
$^
ÀÇ °ªÀº ±× À̸§À» µü Çѹø ´ã°í ÀÖ´Â ÇüÅ°¡ µÈ´Ù.
$+
$*
make
´Â ´Ù¸¥ make
±¸Çö¹°°úÀÇ È£È¯¼ºÀ»
À§Çؼ¸¸ ÀÌ·± ±«±â½º·± ÀÏÀ» ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ¹¬½ÃÀû ±ÔÄ¢µéÀ̳ª Á¤Àû
ÆÐÅÏ ±ÔÄ¢µéÀ» Á¦¿ÜÇÏ°í´Â `$*' ¸¦ ¾²Áö ¾Êµµ·Ï ÇØ¾ß ÇÒ
°ÍÀÌ´Ù.
¸í½ÃÀû ±ÔÄ¢ ¾ÈÀÇ Å¸°Ù À̸§ÀÌ ÀÎ½ÄµÈ Á¢¹Ì»ç·Î ³¡³ªÁö ¾Ê´Â´Ù¸é `$*'
´Â ±× ±ÔÄ¢¿¡ ´ëÇؼ ºó ¹®ÀÚ¿·Î ¼³Á¤µÈ´Ù.
`$?' ´Â º¯°æÇÑ Á¾¼Ó¹°µé¿¡ ´ëÇؼ¸¸ ÀÛ¾÷À» ÇÏ°íÀÚ ÇÒ ¶§, ¸í½ÃÀû ±ÔÄ¢µé ¾È¿¡¼µµ À¯¿ëÇÏ´Ù. ¿¹¸¦ µé¾î¼ `lib' ¶ó´Â À̸§ÀÇ ¾ÆÄ«À̺갡 ¸î°³ÀÇ ¿ÀºêÁ§Æ® ÆÄÀϵéÀÇ º¹»ç¹°µéÀ» ´ã°í ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ. ´ÙÀ½ ±ÔÄ¢Àº º¯°æµÈ ¿ÀºêÁ§Æ® ÆÄÀϵ鸸À» ¾ÆÄ«À̺꿡´Ù ³ÖÀ» °ÍÀÌ´Ù:
lib: foo.o bar.o lose.o win.o ar r lib $?
À§¿¡¼ ¸®½ºÆ®µÈ º¯¼öµé(ÀÚµ¿ º¯¼öµé)Áß¿¡¼,
³×°³´Â ´ÜÀÏ ÆÄÀÏ À̸§µéÀÎ °ªµéÀ» °¡Áö°í
µÎ°³´Â ÆÄÀÏ À̸§µéÀÇ ¸®½ºÆ®µéÀÎ °ªµéÀ» °¡Áø´Ù. ÀÌ·± ¿©¼¸°³ º¯¼öµéÀº
ÆÄÀÏÀÇ µð·ºÅ丮 À̸§À̳ª µð·ºÅ丮 ³»ÀÇ ÆÄÀÏ À̸§°ú °°Àº °ªÀ» ÃßÃâÇÏ´Â
º¯Á¾µéÀ» °¡Áø´Ù.
º¯Á¾ º¯¼öµéÀÇ À̸§µéÀº °¢°¢ `D' ³ª `F' ¸¦
ºÙ¿©¼ ÀÌ·ç¾îÁø´Ù. ÀÌ·± º¯Á¾µéÀº GNU make
¿¡¼ ¹ÝÂë
±¸´Ú´Ù¸®ÀÌ´Ù. ¿Ö³Ä¸é dir
°ú notdir
ÇÔ¼öµéÀÌ µ¿ÀÏÇÑ
È¿°ú¸¦ ¾ò´Âµ¥ »ç¿ëµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù (see section ÆÄÀÏ À̸§µéÀ» À§ÇÑ ÇÔ¼ö(Functions for File Names)). ±×·¯³ª `F' º¯Á¾µéÀº dir
ÇÔ¼öÀÇ
°á°ú¿¡¼´Â Ç×»ó ³ªÅ¸³ª´Â ¸¶Áö¸· ½½·¡½¬¸¦ ¸ðµÎ Á¦°ÅÇÑ´Ù´Â »ç½Ç¿¡
ÁÖ¸ñÇÏÀÚ. ´ÙÀ½Àº º¯Á¾µéÀÇ Å×À̺íÀÌ´Ù:
ÀÌ·± ÀÚµ¿ º¯¼öµé¿¡ ´ëÇؼ ¾ê±âÇÒ ¶§ Ưº°ÇÑ ½ºÅ¸ÀÏÀÇ °ü·Ê¸¦ »ç¿ëÇÑ´Ù´Â
°Í¿¡ ÁÖ¸ñÇÏÀÚ; objects
¿Í CFLAGS
¿Í °°Àº ÀÏ¹Ý º¯¼öµé¿¡
´ëÇؼ ÀÛ¼ºÇÒ ¶§ "º¯¼ö <
" °¡ ¾Æ´Ï¶ó
"`$<'ÀÇ °ª" ¶ó°í ¾´´Ù. ÀÌ·± °ü·Ê°¡ ÀÌ·± Ưº°ÇÑ °æ¿ì¿¡ Á» ´õ
ÀÚ¿¬½º·´°Ô º¸ÀÎ´Ù°í »ý°¢ÇÑ´Ù. ÀÌ°ÍÀÌ ¾ÆÁÖ ±íÀº Á߿伺À» °¡Áø´Ù°í
ÃßÃøÇÏÁö ¸»ÀÚ; `$<' ´Â `$(CFLAGS)' °¡ CFLAGS
¶ó´Â
À̸§ÀÇ º¯¼ö¸¦ ÂüÁ¶ÇÏ´Â °Íó·³, <
¶ó´Â º¯¼ö¸¦ ÂüÁ¶ÇÏ´Â
°ÍÀÌ´Ù. `$<' ÀÚ¸®¿¡ `$(<)' ¶ó´Â º¯¼ö¸¦ ¾µ¼öµµ ÀÖ´Ù.
Ÿ°Ù ÆÐÅÏÀº µÑ Áß¿¡ ¶Ç´Â µÑ´Ù ºó °ÍÀÏ ¼ö ÀÖ´Â, Á¢µÎ»ç¿Í Á¢¹Ì»ç »çÀÌ¿¡ ÇϳªÀÇ `%' ¸¦ °¡Áø °ÍÀÌ´Ù. ¾î¶² ÆÄÀÏ À̸§ÀÌ Áߺ¹¾øÀÌ, Á¢µÎ»ç·Î ½ÃÀÛÇÏ°í Á¢¹Ì¾î·Î ³¡³ª¸é ÆÐÅÏÀÌ ÀÏÄ¡ÇÏ´Â °ÍÀÌ´Ù. Á¢µÎ»ç¿Í Á¢¹Ì»ç »çÀÌÀÇ ÅؽºÆ®´Â ÁÙ±â(stem) À̶ó°í ºÒ¸°´Ù. ±×·¡¼ ÆÐÅÏ `%.o' °¡ `test.o' ¿Í ÀÏÄ¡Çϸé ÁÙ±â´Â `test' ÀÎ °ÍÀÌ´Ù. ÆÐÅÏ ±ÔÄ¢ Á¾¼Ó¹°µéÀº `%' ¹®ÀÚ¿¡ ÁÙ±âµéÀ» ´ëÀÔÇؼ ¸¸µé¾îÁø ½ÇÁ¦ ÆÄÀÏ À̸§µéÀÌ´Ù. ±×·¡¼ µ¿ÀÏÇÑ ¿¹Á¦¿¡¼ Á¾¼Ó¹°µé ÁßÀÇ Çϳª°¡ `%.c' ·Î ÀÛ¼ºµÇ¸é ÀÌ°ÍÀº `test.c' ·Î È®ÀåµÈ´Ù.
Ÿ°Ù ÆÐÅÏÀÌ ½½·¡½¬¸¦ °®Áö ¾ÊÀ¸¸é(±×¸®°í º¸Åë ÀÌ°ÍÀº ±×·¸Áö ¾Ê´Ù), ÆÄÀÏ À̸§¿¡¼ µð·ºÅ丮 À̸§µéÀº ±× ÆÄÀÏ À̸§¿¡¼, Ÿ°Ù Á¢µÎ»ç¿Í Á¢¹Ì»ç¿Í ºñ±³µÇ±âÀü¿¡, Á¦°ÅµÈ´Ù. ÆÄÀÏ À̸§À» Ÿ°Ù ÆÐÅÏ°ú ºñ±³ÇÑ ÈÄ µð·ºÅ丮 À̸§µéÀº, ÀÌµé ¸¶Áö¸·¿¡ ÀÖ´Â ½½·¡½¬¿Í ÇÔ²², ÆÐÅÏ ±ÔÄ¢ÀÇ Á¾¼Ó¹° ÆÐÅϵé°ú ±× ÆÄÀÏ À̸§À¸·ÎºÎÅÍ ¸¸µé¾îÁö´Â Á¾¼Ó¹° ÆÄÀÏ¿¡ ´õÇØÁø´Ù. µð·ºÅ丮µéÀº »ç¿ëÇÒ ¹¬½ÃÀû ±ÔÄ¢À» ãÀ» ¸ñÀûÀ¸·Î¸¸ ¹«½ÃµÈ´Ù. ±×·¯³ª ±× ±ÔÄ¢ÀÇ Àû¿ë¿¡¼´Â ¹«½ÃµÇÁö ¾Ê´Â´Ù. ±×·¡¼ `e%t' ´Â `src/eat' °ú ÀÏÄ¡ÇÏ´Â °ÍÀÌ°í ¿©±â¼ `src/a' ÀÌ ÁÙ±âÀÌ´Ù. Á¾¼Ó¹°µéÀÌ ÆÄÀÏ À̸§µéÀÌ µÇ¸é ÁÙ±â·ÎºÎÅÍ µð·ºÅ丮µéÀÌ ±× ¾Õ¿¡ µ¡ºÙ¿©Áø´Ù. À̶§ ÁÙ±âÀÇ ³ª¸ÓÁö°¡ `%' ¿¡ ´ëÀԵȴÙ. Á¾¼Ó¹° ÆÐÅÏ `c%r' ¸¦ °¡Áö°í ÁÙ±â `src/a' ´Â ÆÄÀÏ À̸§ `src/car' ¸¦ Á¦°øÇÑ´Ù.
ÆÐÅÏ ±ÔÄ¢ÀÇ Å¸°ÙÀÌ ´ÜÁö `%' À̶ó¸é ÀÌ°ÍÀº ÆÄÀÏ À̸§ÀÌ ¹«¾ùÀ̵ç
ÀÌ°Í°ú ÀÏÄ¡ÇÏ´Â °ÍÀÌ´Ù. ¿ì¸®´Â ÀÌ·± ±ÔÄ¢À» ÀÓÀÇÀÇ °Í°úµµ
ÀÏÄ¡ÇÏ´Â(match-anything) ±ÔÄ¢À̶ó°í ºÎ¸¥´Ù. À̵éÀº ¾ÆÁÖ À¯¿ëÇÏÁö¸¸
make
°¡ ±×µéÀ» »ý°¢ÇÏ´Â ½Ã°£ÀÌ ¸¹ÀÌ µç´Ù. ¿Ö³Ä¸é ÀÌ°ÍÀº
Ÿ°ÙÀ¸·Î³ª Á¾¼Ó¹°·Î½á ¸®½ºÆ®µÈ °¢ ÆÄÀÏ À̸§µé¿¡ ´ëÇؼ ¸ðµç ±×·±
±ÔÄ¢À» »ý°¢ÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù.
makefile ÀÌ `foo.c' ¸¦ ¾ð±ÞÇß´Ù°í ÇÏÀÚ. ÀÌ Å¸°Ù¿¡ ´ëÇؼ
make
´Â ¿ÀºêÁ§Æ® ÆÄÀÏ `foo.c.o' ¸¦ ¸µÅ©ÇÔÀ¸·Î½á, ¶Ç´Â
`foo.c.c' ·ÎºÎÅÍ Çѹø¿¡ C ÄÄÆÄÀÏÇÏ°í-¸µÅ©ÇÔÀ¸·Î½á, ¶Ç´Â
`foo.c.p' ·ÎºÎÅÍ ÆĽºÄ® ÄÄÆÄÀÏÇÏ°í-¸µÅ©ÇÔÀ¸·Î½á, ±×¸®°í ±âŸ µîµî
¸¹Àº ´Ù¸¥ °¡´É¼ºµéÀ»¿¡ ÀÇÇؼ `foo.c' ¸¦ ¸¸µé·Á°í »ý°¢Çؾ߸¸ ÇÒ
°ÍÀÌ´Ù.
ÀÌ·± °¡´É¼ºµéÀÌ, `foo.c' ÀÌ C ¼Ò½º ÆÄÀÏÀÌ°í ½ÇÇà ÆÄÀÏÀÌ ¾Æ´Ï±â
¶§¹®¿¡, ´Ù¼Ò ±«»ó¸ÁÄ¢ÇÏ´Ù´Â °ÍÀ» ¿ì¸®´Â ¾È´Ù. make
°¡ ÀÌ·±
°¡´É¼ºµéÀ» »ý°¢ÇÏÁö ¾Ê´Â´Ù¸é, `foo.c.o' °ú `foo.c.p' °ú °°Àº
ÆÄÀϵéÀÌ Á¸ÀçÇÏÁö ¾ÊÀ»°ÍÀ̱⠶§¹®¿¡ ±×·± °¡´É¼ºµéÀ» ±Ã±ØÀûÀ¸·Î °ÅºÎÇÒ
°ÍÀÌ´Ù. ±×·¯³ª ÀÌ·± °¡´É¼ºµéÀº ³Ê¹« ¸¹±â ¶§¹®¿¡ ±×°ÍµéÀ» »ý°¢Çؾß
ÇÑ´Ù¸é make
´Â ¾ÆÁÖ ´À¸®°Ô ÀÛµ¿ÇÒ °ÍÀÌ´Ù.
¼Óµµ¸¦ ´õ ³ôÀ̱â À§Çؼ make
°¡ ÀÓÀÇÀÇ°Í°úµµ ÀÏÄ¡ÇÏ´Â ±ÔÄ¢µéÀ»
»ý°¢ÇÒ ¶§ ´Ù¾çÇÑ Á¦¾àÀ» µÐ´Ù. Àû¿ëµÉ ¼ö ÀÖ´Â Á¦¾àÀº µÎ°³
ÀÖ´Ù. ÀÓÀÇÀÇ°Í°úµµ ÀÏÄ¡ÇÏ´Â ±ÔÄ¢À» Á¤ÀÇÇÒ ¶§¸¶´Ù, ±×·±
±ÔÄ¢¿¡ ´ëÇؼ Çϳª ¶Ç´Â ´Ù¸¥ Çϳª¸¦ ¹Ýµå½Ã ¼±ÅÃÇؾ߸¸ ÇÑ´Ù.
ÇÑ°¡Áö ¼±ÅÃÀº ÀÓÀÇÀÇ°Í°úµµ ÀÏÄ¡ÇÏ´Â ±ÔÄ¢À» ´õºí ÄÝ·ÐÀ¸·Î Á¤ÀÇÇÔÀ¸·Î½á terminal ·Î ¸¶Å·ÇÏ´Â °ÍÀÌ´Ù. ±ÔÄ¢ÀÌ terminal À̸é ÀÌ°ÍÀº, ±×°ÍÀÇ Á¾¼Ó¹°µéÀÌ ½ÇÁ¦·Î Á¸ÀçÇÏÁö ¾Ê´Â ÇÑ Àû¿ëµÇÁö ¾Ê´Â´Ù. ´Ù¸¥ ¹¬½ÃÀû ±ÔÄ¢µé·Î ¸¸µé¾îÁú ¼ö ÀÖ´Â Á¾¼Ó¹°µéÀº ÁÁÀº °ÍÀÌ ¾Æ´Ï´Ù. ´Ù¸¥ ¸»·Î Çϸé terminal ±ÔÄ¢À» ³Ñ¾î¼ ´õÀÌ»óÀÇ ¿¬¼â ÀÛ¿ëÀÌ ÀϾÁö ¾Ê´Â´Ù.
¿¹¸¦ µé¾î¼ RCS ¿Í SCCS ÆÄÀϵé·ÎºÎÅÍ ¼Ò½ºµéÀ» ÃßÃâÇÏ´Â ³»ÀåµÈ ¹¬½ÃÀû
±ÔÄ¢µéÀº terminal ÀÌ´Ù; °á°úÀûÀ¸·Î ÆÄÀÏ `foo.c,v' ÀÌ Á¸ÀçÇÏÁö
¾Ê´Â´Ù¸é make
´Â `foo.c,v.o' ³ª `RCS/SCCS/s.foo.c,v'
·ÎºÎÅÍ Áß°£ ÆÄÀÏ·Î½á ±×°ÍÀ» ¸¶µé·Á°í »ý°¢Á¶Â÷ ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. RCS ¿Í
SCCS ÆÄÀϵéÀº ÀϹÝÀûÀ¸·Î ÃÖÁ¾ ¼Ò½º ÆÄÀϵéÀÌ´Ù. À̵éÀº ´Ù¸¥
ÆÄÀϵé·ÎºÎÅÍ ´Ù½Ã ¸¸µé¾îÁö¸é ¾ÈµÈ´Ù; ±×·¯¹Ç·Î make
´Â ±×°ÍµéÀ»
´Ù½Ã ¸¸µå´Â ¹æ¹ýµéÀ» ãÁö ¾ÊÀ½À¸·Î½á ½Ã°£À» Àý¾àÇÒ ¼ö ÀÖ´Ù.
ÀÓÀÇÀÇ°Í°ú ÀÏÄ¡ÇÏ´Â ±ÔÄ¢À» terminal ·Î ¸¶Å·ÇÏÁö ¾ÊÀ¸¸é, ÀÌ°ÍÀº ºñ-terminal. ºñ-terminal ÀÓÀÇÀÇ°Í°ú ÀÏÄ¡ÇÏ´Â ±ÔÄ¢Àº ƯÁ¤ÇÑ µ¥ÀÌÅÍ Å¸ÀÔÀ» °¡¸®Å°´Â ÆÄÀÏ À̸§¿¡ Àû¿ëµÉ ¼ö ¾ø´Ù. ¾î¶² ÆÄÀÏ À̸§Àº, ºñ-ÀÓÀÇÀÇ°Í°ú ÀÏÄ¡ÇÏ´Â ¹¬½ÃÀû ±ÔÄ¢ Ÿ°ÙÀÌ ±×°Í°ú ÀÏÄ¡ÇÒ °æ¿ì, ƯÁ¤ µ¥ÀÌÅÍ Å¸ÀÔÀ» °¡¸®Å²´Ù.
¿¹¸¦ µé¾î¼ `foo.c' ´Â ÆÐÅÏ ±ÔÄ¢ `%.c : %.y' (Yacc ¸¦
½ÇÇàÇÏ´Â ±ÔÄ¢) ¿¡ ´ëÇÑ Å¸°Ù°ú ÀÏÄ¡ÇÑ´Ù. ÀÌ ±ÔÄ¢ÀÌ ½ÇÁ¦·Î Àû¿ë°¡´ÉÇÑ°¡
¾Æ´Ñ°¡¿¡ (ÆÄÀÏ `foo.y' ÀÌ Á¸ÀçÇÒ¶§¸¸ ¹ß»ýÇÑ´Ù) ´ëÇؼ »ý°¢ÇÒ ÇÊ¿ä
¾øÀÌ, ±×°ÍÀÌ Å¸°ÙÀÌ ÀÏÄ¡ÇÑ´Ù´Â »ç½Ç·Î½á ÆÄÀÏ `foo.c' ¿¡ ´ëÇÑ
ºñ-terminal ÀÓÀÇÀÇ°Í°úµµ ÀÏÄ¡ÇÏ´Â ±ÔÄ¢µé ÁßÀÇ ¾Æ¹«°Å³ª¸¦ »ý°¢ÇÏ´Â °ÍÀ»
¸·±â¿¡´Â ÃæºÐÇÏ´Ù. ±×·¡¼ make
´Â `foo.c' ¸¦
`foo.c.o', `foo.c.c', `foo.c.p', µîÀ¸·ÎºÎÅÍ ½ÇÇà
ÆÄÀÏ·Î½á ¸¸µé¾îº¼·Á´Â ½Ãµµ¸¦ »ý°¢Á¶Â÷ ¾Ê´Â´Ù.
ºñ-terminal ÀÓÀÇÀÇ°Í°ú ÀÏÄ¡ÇÏ´Â ±ÔÄ¢µéÀÌ Æ¯Á¤ÇÑ µ¥ÀÌÅÍ Å¸ÀÔµé(½ÇÇà ÆÄÀÏ°ú °°Àº)À» ´ã°í ÀÖ´Â ÆÄÀϵé°úÀ» ¸¸µå´Â µ¥ »ç¿ëµÈ´Ù´Â °Í°ú, ÀÎ½ÄµÈ Á¢¹Ì»ç¸¦ °¡Áö´Â ÆÄÀÏ À̸§µéÀÌ ¾î¶² ´Ù¸¥ ƯÁ¤ÇÑ µ¥ÀÌÅÍ Å¸ÀÔ(C ¼Ò½º ÆÄÀÏ°ú °°Àº)À» °¡¸®Å²´Ù´Â °ÍÀÌ ÀÌ·± Á¦¾àÀÇ µ¿±âÀÌ´Ù.
Ư¼öÇÑ ³»ÀåµÈ ´õ¹Ì ÆÐÅÏ ±ÔÄ¢µéÀº ƯÁ¤ ÆÄÀÏ À̸§µéÀ» ÀνÄÇؼ ºñ-terminal ÀÓÀÇÀÇ°Í°ú ÀÏÄ¡ÇÏ´Â ±ÔÄ¢µéÀÌ »ý°¢µÇÁö ¾Êµµ·Ï Çϱâ À§Çؼ¸¸ Á¦°øµÈ´Ù. ÀÌ·± ´õ¹Ì ±ÔÄ¢µéÀº Á¾¼Ó¹°µé°ú ¸í·ÉµéÀ» °¡ÁöÁö ¾Ê°í ¸ðµç ´Ù¸¥ ¸ñÀûµé¿¡ ´ëÇؼ ¹«½ÃµÈ´Ù. ¿¹¸¦ µé¾î¼ ´ÙÀ½°ú °°Àº ³»ÀåµÈ ¹¬½ÃÀû ±ÔÄ¢Àº
%.p :
`foo.p' °ú °°Àº ÆĽºÄ® ¼Ò½º ÆÄÀϵéÀÌ Æ¯Á¤ÇÑ Å¸°Ù ÆÐÅÏ°ú ÀÏÄ¡ÇϹǷΠ`foo.p.o' ³ª `foo.p.c' ¸¦ ã´À¶ó°í ½Ã°£À» ÇãºñÇÏÁö ¸øÇϵµ·Ï Çϱâ À§Çؼ Á¸ÀçÇÑ´Ù.
`%.p' ¸¦ À§ÇÑ °Í°ú °°Àº ´õ¹Ì ÆÐÅÏ ±ÔÄ¢µéÀº Á¢¹Ì»ç ±ÔÄ¢µé¿¡¼ÀÇ »ç¿ëÀ» À§Çؼ À¯È¿ÇÏ°Ô ³ª¿µÈ ¸ðµç Á¢¹Ì»çµé¿¡ ´ëÇؼ ¸¸µé¾îÁø´Ù (see section ±¸´Ú´Ù¸® Á¢¹Ì»ç ±ÔÄ¢(Old-Fashioned Suffix Rules)).
³»Àå ¹¬½ÃÀû ±ÔÄ¢(¶Ç´Â »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ °Í)À» µ¿ÀÏÇÑ Å¸°Ù°ú Á¾¼Ó¹°µéÀ» °¡ÁöÁö¸¸ ¸í·ÉµéÀÌ ´Ù¸¥ »õ·Î¿î ÆÐÅÏ ±ÔÄ¢À» Á¤ÀÇÇÔÀ¸·Î½á ¿À¹ö¶óÀ̵åÇÒ ¼ö ÀÖ´Ù. »õ·Î¿î ±ÔÄ¢ÀÌ Á¤ÀÇµÉ ¶§ ³»Àå ±ÔÄ¢ÀÌ ´ëüµÈ´Ù. »õ·Î¿î ±ÔÄ¢ÀÌ Â÷ÁöÇÏ´Â ¹¬½ÃÀû ±ÔÄ¢µé ½ÃÄö½º¿¡¼ÀÇ À§Ä¡´Â ±× »õ·Î¿î ±ÔÄ¢À» ÀÛ¼ºÇÑ À§Ä¡¿¡ ÀÇÇؼ °áÁ¤µÈ´Ù.
³»Àå ¹¬½ÃÀû ±ÔÄ¢°ú µ¿ÀÏÇÑ Å¸°Ù°ú Á¾¼Ó¹°µéÀ» °¡ÁöÁö¸¸ ¸í·ÉµéÀº ¾ø´Â ÆÐÅÏ ±ÔÄ¢À» Á¤ÀÇÇÔÀ¸·Î½á Àú ³»Àå ¹¬½ÃÀû ±ÔÄ¢À» Ãë¼ÒÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼ ´ÙÀ½Àº ¾î¼Àºí·¯¸¦ ½ÇÇàÇÏ´Â ±ÔÄ¢À» Ãë¼ÒÇÒ °ÍÀÌ´Ù:
%.o : %.s
Á¾¼Ó¹°µéÀ» Çϳªµµ °®Áö ¾Ê´Â Á¦ÀÏ-¸¶Áö¸·(terminal) ÀÓÀÇÀÇ°Í°úµµ ÀÏÄ¡ÇÏ´Â ÆÐÅÏ ±ÔÄ¢À» ÀÛ¼ºÇÔÀ¸·Î½á, ¸¶Áö¸·(last-resort) ¹¬½ÃÀû ±ÔÄ¢À» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù (see section ÀÓÀÇÀÇ °Í°úµµ ÀÏÄ¡ÇÏ´Â ÆÐÅÏ ±ÔÄ¢(Match-Anything Pattern Rules)). ÀÌ°ÍÀº ´Ù¸¥ ÆÐÅÏ ±ÔÄ¢°ú ºñ½ÁÇÏ´Ù; ÀÌ°ÍÀº ÀÓÀÇÀÇ Å¸°Ù°úµµ ÀÏÄ¡ÇÒ °ÍÀÌ´Ù´Â °ÍÀÌ ÀÌ°ÍÀÌ Æ¯º°ÇÑ À¯ÀÏÇÑ °ÍÀÌ´Ù. ±×·¡¼ ±×·± ±ÔÄ¢ÀÇ ¸í·ÉµéÀº, ÀÚ½ÅÀÇ ¸í·ÉµéÀ» °¡ÁöÁö ¾Ê´Â ¸ðµç Ÿ°Ùµé°ú Á¾¼Ó¹°µé¿¡ ´ëÇؼ ±×¸®°í ´Ù¸¥ ¹¬½ÃÀû ±ÔÄ¢ÀÌ Àû¿ëµÇÁö ¾Ê´Â °Íµé¿¡ ´ëÇؼ »ç¿ëµÈ´Ù.
¿¹¸¦ µé¾î¼ makefile À» Å×½ºÆ®ÇÒ ¶§ ¼Ò½º ÆÄÀϵéÀÌ ½ÇÁ¦ µ¥ÀÌÅ͸¦ °¡Áö°í ÀÖ´Â °ÍÀΰ¡ ½Å°æ¾²Áö ¾Ê°í, ´ë½Å ±×µéÀÌ Á¸ÀçÇϴ°¡ ¾ÈÇϴ°¡¸¸ ½Å°æ¾µ ¼öµµ ÀÖ´Ù. ±×·¸´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇÒ ¼öµµ ÀÖ´Ù:
%:: touch $@
ÀÌ°ÍÀº (Á¾¼Ó¹°·Î½á) ÇÊ¿äÇÑ ¸ðµç ¼Ò½º ÆÄÀϵéÀÌ ÀÚµ¿À¸·Î »ý¼ºµÇµµ·Ï ÇÑ´Ù.
ÀÌ°Í ´ë½Å ÀüÇô ±ÔÄ¢µéÀÌ ¾ø´Â, ½ÉÁö¾î ¸í·ÉµéÀ» ÁöÁ¤ÇÏÁö ¾Ê´Â ±ÔÄ¢ÀÇ,
Ÿ°Ùµé¿¡ ´ëÇؼ »ç¿ëµÇ´Â ¸í·ÉµéÀ» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô Çϱâ À§Çؼ
.DEFAULT
Ÿ°Ù¿¡ ´ëÇÑ ±ÔÄ¢À» ÀÛ¼ºÇÏ¸é µÈ´Ù. ±×·± ±ÔÄ¢ÀÇ ¸í·ÉµéÀº
¸í½ÃµÈ ±ÔÄ¢ÀÇ Å¸°Ùµé·Î ³ªÅ¸³ªÁö ¾Ê´Â,
¾î¶² ¹¬½ÃÀû ±ÔÄ¢µµ Àû¿ëµÇÁö ¾Ê´Â, Á¾¼Ó¹°µé¿¡ ´ëÇؼ
»ç¿ëµÈ´Ù. ÀϹÝÀûÀ¸·Î ÀÛ¼ºÇÏÁö ¾ÊÀ¸¸é .DEFAULT
Àº ¾ø´Ù.
´ÙÀ½°ú °°ÀÌ .DEFAULT
¸¦ ¸í·ÉÀ̳ª Á¾¼Ó¹°µéÀÌ ¾øÀÌ »ç¿ëÇÑ´Ù¸é:
.DEFAULT:
.DEFAULT
¿¡ ´ëÇؼ ÀÌÀü¿¡ Á¤ÀÇµÈ ¸í·ÉµéÀÌ »èÁ¦µÈ´Ù. ±×·¯¸é
make
´Â .DEFAULT
¸¦ ÀüÇô Á¤ÀÇÇÏÁö ¾ÊÀº °Íó·³ ÀÛµ¿ÇÒ
°ÍÀÌ´Ù.
¾î¶² Ÿ°ÙÀÌ ÀÓÀÇÀÇ°Í°úµµ ÀÏÄ¡ÇÏ´Â ÆÐÅÏÀ̳ª .DEFAULT
À¸·ÎºÎÅÍ
¸í·ÉµéÀ» ¾ò±â¸¦ ¿øÇÏÁö ¾ÊÁö¸¸, ¶ÇÇÑ ¾î¶² ¸í·Éµµ ±×·± Ÿ°Ù¿¡ ´ëÇؼ
½ÇÇàµÇ´Â °ÍÀ» ¿øÇÏÁö ¾Ê´Â´Ù¸é, ÀÌ°Í¿¡°Ô ºó ¸í·ÉµéÀ» ÁÙ ¼ö ÀÖ´Ù
(see section ºó ¸í·É »ç¿ëÇϱâ(Using Empty Commands)).
¸¶Áö¹Ì°¡ ±ÔÄ¢À» »ç¿ëÇؼ ´Ù¸¥ makefile ÀÇ ÀϺθ¦ ¿À¹ö¶óÀ̵åÇÒ ¼ö ÀÖ´Ù. See section ´Ù¸¥ MakefileÀÇ ÀϺθ¦ ¿À¹ö¶óÀ̵ù(Overriding Part of Another Makefile).
Á¢¹Ì»ç ±ÔÄ¢(Suffix rules) À̶õ make
¿¡ ´ëÇؼ ¹¬½ÃÀû
±ÔÄ¢µéÀ» Á¤ÀÇÇÏ´Â ¿À·¡µÈ-½ºÅ¸ÀÏÀÇ ¹æ¹ýÀÌ´Ù. Á¢¹Ì»ç ±ÔÄ¢µéÀº ÆÐÅÏ
±ÔÄ¢µéÀÌ Á» ´õ ÀϹÝÀûÀÌ°í Á» ´õ ¸í·áÇϱ⠶§¹®¿¡ »çÀåµÇ¾ú´Ù. ¿À·¡µÈ
makefile µé°úÀÇ È£È¯¼ºÀ» À§Çؼ GNU make
´Â ÀÌ°ÍÀ»
Áö¿øÇÑ´Ù. ±×µéÀº ´ÙÀ½ µÎ°¡Áö Á¾·ù°¡ ÀÖ´Ù:
´õºí-Á¢¹Ì»ç(double-suffix) ¿Í
´ÜÀÏ-Á¢¹Ì»ç(single-suffix).
´õºí-Á¢¹Ì»ç ±ÔÄ¢Àº µÎ°³ÀÇ Á¢¹Ì»çµé·Î Á¤ÀǵȴÙ: Ÿ°Ù Á¢¹Ì»ç¿Í ¼Ò½º Á¢¹Ì»ç. ÀÌ°ÍÀº ÆÄÀÏÀÇ À̸§ÀÌ Å¸°Ù Á¢¹Ì»ç·Î ³¡³ª´Â ¾î¶² ÆÄÀÏ°úµµ ÀÏÄ¡ÇÑ´Ù. ´ëÀÀÇÏ´Â ¹¬½ÃÀû Á¾¼Ó¹°Àº Ÿ°Ù Á¢¹Ì»ç¸¦ ¼Ò½º Á¢¹Ì»ç·Î ¹Ù²ã¼ ¸¸µé¾îÁø´Ù. Ÿ°Ù°ú ¼Ò½º Á¢¹Ì»çµéÀÌ `.o' ¿Í `.c' ÀÎ µÎ-Á¢¹Ì»ç ±ÔÄ¢ Àº ÆÐÅÏ ±ÔÄ¢ `%.o : %.c' ¿Í µ¿ÀÏÇÏ´Ù.
´ÜÀÏ-Á¢¹Ì»ç ±ÔÄ¢Àº ´ÜÀÏ Á¢¹Ì»ç·Î Á¤ÀǵȴÙ. ÀÌ°ÍÀº ¼Ò½º Á¢¹Ì»çÀÌ´Ù. ´ÜÀÏ-Á¢¹Ì»ç ±ÔÄ¢Àº ÀÓÀÇÀÇ ÆÄÀϵé°ú ÀÏÄ¡ÇÏ°í ´ëÀÀÇÏ´Â ¹¬½ÃÀû Á¾¼Ó¹° À̸§Àº ¼Ò½º Á¢¹Ì»ç¸¦ µ¡ºÙ¿©¼ ¸¸µé¾îÁø´Ù. ¼Ò½º Á¢¹Ì»è `.c' ÀÎ ´ÜÀÏ-Á¢½Ã»ç ±ÔÄ¢Àº ÆÐÅÏ ±ÔÄ¢ `% : %.c' ¿Í µ¿ÀÏÇÏ´Ù.
Á¢¹Ì»ç ±ÔÄ¢ Á¤ÀǵéÀº °¢ ±ÔÄ¢ÀÇ Å¸°Ù°ú, Á¤ÀÇµÈ (¾Ë·ÁÁø) Á¢¹Ì»ç ¸®½ºÆ®¿Í
ºñ±³Çؼ ÀνĵȴÙ. make
°¡ Ÿ°ÙÀÌ ¾Ë·ÁÁø Á¢¹Ì»çÀÎ ±ÔÄ¢À» º¸¸é
ÀÌ ±ÔÄ¢Àº ´ÜÀÏ-Á¢¹Ì»ç ±ÔÄ¢À¸·Î »ý°¢µÈ´Ù. make
°¡ Ÿ°ÙÀÌ µÎ°³ÀÇ
¾Ë·ÁÁø Á¢¹Ì»çµéÀÌ ¼·Î ºÙÀº ÇüÅÂÀÎ ±ÔÄ¢À» º¸¸é ÀÌ ±ÔÄ¢Àº ´õºí-Á¢¹Ì»ç
±ÔÄ¢À¸·Î Ãë±ÞµÈ´Ù.
¿¹¸¦ µé¾î¼ `.c' ¿Í `.o' ´Â ¾Ë·ÁÁø Á¢¹Ì»ç µðÆúÆ® ¸®½ºÆ®¿¡ µÑ
´Ù ÀÖ´Â °ÍÀÌ´Ù. ±×·¯¹Ç·Î Ÿ°ÙÀÌ `.c.o' ÀÎ ±ÔÄ¢À» Á¤ÀÇÇϸé
make
´Â ÀÌ°ÍÀ» ¼Ò½º Á¢¹Ì»ç´Â `.c' ÀÌ°í Ÿ°Ù Á¢¹Ì»ç´Â
`.o' ÀÎ ´õºí-Á¢¹Ì»ç·Î »ý°¢ÇÑ´Ù. ´ÙÀ½Àº C ¼Ò½º ÆÄÀÏÀ» ÄÄÆÄÀÏÇϱâ
À§ÇÑ ±ÔÄ¢À» Á¤ÀÇÇÏ´Â ¿À·¡µÈ-½ºÅ¸ÀÏÀÇ ¹æ¹ýÀÌ´Ù:
.c.o: $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
Á¢¹Ì»ç ±ÔÄ¢µéÀº ±×µé ÀÚ½ÅÀÇ Á¾¼Ó¹°À» ÀüÇô °¡Áú¼ö ¾ø´Ù. ±×µéÀÌ ÀÖ´Ù¸é ±×µéÀº Á¢¹Ì»ç ±ÔÄ¢µé·Î »ý°¢µÇ¾îÁö´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÌ»ó À̸§µéÀ» °¡Áø ÀÏ¹Ý ÆÄÀϵé·Î »ý°¢µÈ´Ù. ±×·¡¼ ´ÙÀ½ ±ÔÄ¢Àº:
.c.o: foo.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
`.c.o' ¸¦ Á¾¼Ó ÆÄÀÏ `foo.h' ·ÎºÎÅÍ ¸¸µå´Â ¹æ¹ýÀ» ¸»ÇÏ´Â °ÍÀÌ µÇ¹ö¸®°í, ÀüÇô ´ÙÀ½°ú °°Àº ÆÐÅÏ ±ÔÄ¢ÀÌ ¾Æ´Ï°Ô µÇ¹ö¸°´Ù:
%.o: %.c foo.h $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
ÀÌ°ÍÀº `.c' ÆÄÀϵé·ÎºÎÅÍ `.o' ÆÄÀϵéÀ» ¸¸µå´Â ¹æ¹ý°ú `foo.h' ¿¡ ÀÇÁ¸ÇÏ´Â ÀÌ ÆÐÅÏ ±ÔÄ¢À» »ç¿ëÇؼ ¸ðµç `.o' ÆÄÀϵéÀ» ¸¸µå´Â ¹æ¹ýÀ» ¸»ÇÏ´Â °ÍÀÌ´Ù.
¾î¶² ¸í·Éµµ ¾ø´Â Á¢¹Ì»ç ±ÔÄ¢µéµµ ¶ÇÇÑ Àǹ̰¡ ¾ø´Ù. ±×µéÀº ¸í·ÉµéÀ» °¡ÁöÁö ¾Ê´Â ÆÐÅÏ ±ÔÄ¢µéÀÌ ±×·¯´Â °Íó·³, ÀÌÀü ±ÔÄ¢µéÀ» Áö¿ìÁö ¾Ê´Â´Ù (see section ¹¬½ÃÀû ±ÔÄ¢ Ãë¼Ò½ÃÅ°±â(Canceling Implicit Rules)). ±×µéÀº µ¥ÀÌÅͺ£À̽º¿¡ Ÿ°ÙÀ¸·Î ´Ü¼øÈ÷ Á¢¹Ì»ç³ª ÇÕÃÄÄ£ ÇѽÖÀÇ Á¢¹Ì»çµéÀ» ³Ö´Â´Ù.
¾Ë·ÁÁø Á¢¹Ì»çµéÀº ´Ü¼øÇÏ°Ô Æ¯¼öÇÑ Å¸°Ù .SUFFIXES
ÀÇ Á¾¼Ó¹°µéÀÇ
À̸§ÀÌ´Ù. »ç¿ëÀÚ ÀÚ½ÅÀÇ Á¢¹Ì»çµéÀ», ´ÙÀ½°ú °°ÀÌ ´õ ¸¹Àº Á¾¼Ó¹°µéÀ»
´õÇÏ´Â .SUFFIXES
±ÔÄ¢À» ÀÛ¼ºÇÔÀ¸·Î½á, Ãß°¡ÇÒ ¼ö ÀÖ´Ù:
.SUFFIXES: .hack .win
ÀÌ°ÍÀº `.hack' °ú `.win' À» Á¢¹Ì»ç ¸®½ºÆ® ¸¶Áö¸·¿¡ ´õÇÑ´Ù.
±×°Íµé¿¡´Ù ´õÇÏ´Â °Í ´ë½Å¿¡ ¾Ë·ÁÁø µðÆúÆ® Á¢¹Ì»çµéÀ» Á¦°ÅÇÏ°íÀÚ ÇÑ´Ù¸é
Á¾¼Ó¹°µéÀÌ ÀüÇô ¾ø´Â .SUFFIXES
¸¦ ÀÛ¼ºÇÏ¸é µÈ´Ù. Ư¼öÇÑ ¼·¸®¿¡
ÀÇÇؼ ÀÌ°ÍÀº .SUFFIXES
ÀÇ ¸ðµç Á¸ÀçÇÏ´Â Á¾¼Ó¹°µéÀ»
Á¦°ÅÇÑ´Ù. ±×¸®°í ³ÈÄ »ç¿ëÀÚ°¡ ¿øÇÏ´Â Á¢¹Ì»çµéÀ» ´õÇϱâ À§Çؼ ´Ù¸¥ ±ÔÄ¢À»
ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼,
.SUFFIXES: # Delete the default suffixes .SUFFIXES: .c .o .h # Define our suffix list
`-r' ¶Ç´Â `--no-builtin-rules' Ç÷¡±×´Â µðÆúÆ® Á¢¹Ì»ç ¸®½ºÆ®¸¦ ºó °ÍÀ¸·Î ¸¸µç´Ù.
º¯¼ö SUFFIXES
´Â make
°¡ ÀÓÀÇÀÇ makefile µéÀ» Àбâ Àü¿¡,
Á¢¹Ì»ç µðÆúÆ® ¸®½ºÆ®µéÀÌ Á¤ÀǵȴÙ. Ư¼ö Ÿ°Ù .SUFFIXES
¿¡ ´ëÇÑ
±ÔÄ¢À¸·Î Á¢¹Ì»çµé ¸®½ºÆ®¸¦ º¯°æÇÒ ¼ö ÀÖÁö¸¸ ±×°ÍÀº ÀÌ º¯¼ö´Â ¹Ù²Ü ¼ö ¾ø´Ù.
´ÙÀ½Àº make
°¡ ¾î¶² Ÿ°Ù t ¿¡ ´ëÇؼ ¹¬½ÃÀû ±ÔÄ¢À»
°Ë»öÇϴµ¥ »ç¿ëÇÏ´Â °úÁ¤ÀÌ´Ù. ÀÌ °úÁ¤Àº ¸í·ÉµéÀÌ ¾ø´Â °¢ ´õºí-ÄÝ·Ð
±ÔÄ¢¿¡ ´ëÇؼ, ¸í·ÉÀÌ ¾ø´Â ÀÏ¹Ý ±ÔÄ¢µéÀÇ °¢ Ÿ°Ù¿¡ ´ëÇؼ, ±×¸®°í
¾î¶² ±ÔÄ¢¿¡µµ Ÿ°ÙÀÌ ¾Æ´Ñ °¢ Á¾¼Ó¹°¿¡ ´ëÇؼ, ¼öÇàµÈ´Ù. ÀÌ°ÍÀº ¶ÇÇÑ,
±ÔÄ¢µéÀÇ ¿¬¼â¸¦ ãÀ¸¸é¼ ¹¬½ÃÀû ±ÔÄ¢µé·ÎºÎÅÍ ¿À´Â Á¾¼Ó¹°µé¿¡ ´ëÇؼ,
Àç±ÍÀûÀ¸·Î ¼öÇàµÈ´Ù.
Á¢¹Ì»ç ±ÔÄ¢µéÀº ÀÌ ¾Ë°í¸®Áò¿¡¼ ¾ð±ÞµÇÁö ¾Ê´Â´Ù. ¿Ö³Ä¸é Á¢¹Ì»ç ±ÔÄ¢µéÀº makefile ÀÌ ÀÏ´Ü ÀÐÈ÷¸é µ¿ÀÏÇÑ ÆÐÅÏ ±ÔÄ¢µé·Î º¯È¯µÇ±â ¶§¹®ÀÌ´Ù.
`archive(member)' ÇüÅÂÀÇ ¾ÆÄ«ÀÌºê ¸â¹ö Ÿ°Ù¿¡ ´ëÇؼ ´ÙÀ½ ¾Ë°í¸®ÁòÀÌ µÎ¹ø ½ÇÇàµÈ´Ù. ù¹ø°´Â Àüü Ÿ°Ù À̸§ t ¸¦ »ç¿ëÇÏ°í µÎ¹ø°´Â ù¹ø°°¡ ¾î¶² ±ÔÄ¢µµ ãÁö ¸øÇÑ´Ù¸é t Ÿ°ÙÀ¸·Î½á `(member)' ¸¦ »ç¿ëÇÑ´Ù.
.DEFAULT
¿¡ ´ëÇÑ ±ÔÄ¢ÀÌ,
Á¸ÀçÇÑ´Ù¸é, Àû¿ëµÈ´Ù. ÀÌ·± °æ¿ì t ¿¡°Ô .DEFAULT
°¡ °¡Áö´Â
µ¿ÀÏÇÑ ¸í·ÉµéÀ» ÁØ´Ù. ±×·¸Áö ¾Ê´Ù¸é t ¿¡ ´ëÇÑ ¸í·ÉµéÀº ¾ø´Â °ÍÀÌ
µÈ´Ù.
ÀÏ´Ü Àû¿ëÇÒ ±ÔÄ¢ÀÌ Ã£¾ÆÁö¸é, t ¶Ç´Â n °ú ÀÏÄ¡ÇÏ´Â °Í°ú ´Ù¸¥ ±× ±ÔÄ¢ÀÇ °¢ Ÿ°Ù ÆÐÅÏ¿¡ ´ëÇؼ, ±× ÆÐÅÏ¿¡ ÀÖ´Â `%' ´Â s ·Î ±³Ã¼µÇ°í °á°ú ÆÄÀÏ À̸§Àº, Ÿ°Ù ÆÄÀÏ t¸¦ ´Ù½Ã ¸¸µé±â À§Çؼ ¸í·ÉµéÀÌ ½ÇÇàµÉ ¶§±îÁö, ÀúÀåµÈ´Ù. ÀÌ·± ¸í·ÉµéÀÌ ½ÇÇàµÈ ÈÄ À̵é ÀúÀåµÈ ÆÄÀÏµé °¢°¢Àº µ¥ÀÌÅͺ£À̽º·Î µé¾î°¡°í °»½ÅµÈ °ÍÀ¸·Î ±×¸®°í ±× ÆÄÀÏ t°ú °°Àº °»½Å »óŸ¦ °¡Áö´Â °ÍÀ¸·Î ¸¶Å·µÈ´Ù.
ÆÐÅÏ ±ÔÄ¢ÀÇ ¸í·ÉµéÀÌ t ¿¡ ´ëÇؼ ½ÇÇàµÉ ¶§ ÀÚµ¿º¯¼öµéÀÌ Å¸°Ù°ú Á¾¼Ó¹°µé¿¡ ´ëÀÀÇÏ¿© ¼Á¤µÈ´Ù. See section ÀÚµ¿ º¯¼öµé(Automatic Variables).
Go to the first, previous, next, last section, table of contents.