Go to the first, previous, next, last section, table of contents.


±ÔÄ¢ ÀÛ¼º(Writing Rules)

ruleÀº makefile¿¡ ³ªÅ¸³ª°í ¾ðÁ¦ ±×¸®°í ¾î¶»°Ô ±ÔÄ¢ÀÇ targets(´ë°³ ÇϳªÀÇ ±ÔÄ¢¿¡ Çϳª¸¸ Á¸Àç)À̶ó°í ºÒ¸®´Â ¾î¶² ÆÄÀϵéÀ» ¸®¸ÞÀÌÅ©ÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ°ÍÀº ¸ñÀû¹°ÀÇ dependenciesÀÎ ´Ù¸¥ ÆÄÀÏµé ¸®½ºÆ®¿Í ±× ¸ñÀû¹°À» »ý¼ºÇϰųª °»½ÅÇÏ´Â µ¥ »ç¿ëµÉ "¸í·É"À» ´ã°í ÀÖ´Ù.

±ÔÄ¢µéÀÇ ¼ø¼­´Â, µðÆúÆ® ¸ñÇ¥(default goal)À» °áÁ¤ÇÏ´Â °ÍÀ» Á¦¿ÜÇÏ°í´Â, Áß¿äÇÑ °ÍÀÌ ¾Æ´Ï´Ù: ¿©±â¼­ µðÆúÆ® ¸ñÇ¥(default goalÀ̶õ make°¡, ¿©·¯ºÐÀÌ ¾Æ¹«°Íµµ ÁöÁ¤ÇÏÁö ¾Ê´Â °æ¿ì, »ý°¢Çϴ Ÿ°Ù. µðÆúÆ® ¸ñÇ¥´Â ù¹ø° makefileÀÇ Ã¹¹ø° ±ÔÄ¢ÀÇ Å¸°ÙÀÌ´Ù. ù¹ø° ±ÔÄ¢ÀÌ ´Ù¼öÀÇ Å¸°ÙµéÀ» °¡Áö°í ÀÖÀ¸¸é ù¹ø° Ÿ°Ù¸¸ÀÌ µðÆúÆ®·Î Ãë±ÞµÈ´Ù. ±×·¯³ª µÎ°¡Áö ¿¹¿ÜµéÀÌ ÀÖ´Ù: Á¡À¸·Î ½ÃÀÛÇϴ Ÿ°ÙÀº ±×°ÍÀÌ Çϳª ÀÌ»óÀÇ ½½·¡½¬, `/'¸¦ ´ã°í ÀÖÁö ¾ÊÀ¸¸é µðÆúÆ®°¡ ¾Æ´Ï´Ù; ÆÐÅÏ ±ÔÄ¢À» Á¤ÀÇÇϴ Ÿ°ÙÀº µðÆúÆ® ¸ñÇ¥¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â´Ù. (See section ÆÐÅÏ ±ÔÄ¢À» Á¤ÀÇÇÏ°í ÀçÁ¤Çϱâ(Defining and Redefining Pattern Rules).)

±×·¯¹Ç·Î ¿ì¸®´Â º¸Åë ù¹ø° ±ÔÄ¢ÀÌ, Àüü ÇÁ·Î±×·¥ ¶Ç´Â makefile¿¡ ÀÇÇؼ­ ±â¼úµÈ ¸ðµç ÇÁ·Î±×·¥µéÀ» ÄÄÆÄÀÏÇÏ´Â °ÍÀÌ µÇµµ·Ï, makefileÀ» ÀÛ¼ºÇÑ´Ù(Á¾Á¾ `all'¶ó´Â À̸§ÀÇ Å¸°ÙÀ¸·Î). See section goalÀ» ÁöÁ¤ÇÏ´Â ¸Å°³º¯¼ö(Arguments to Specify the Goals).

±ÔÄ¢ ¹®¹ý(Rule Syntax)

ÀϹÝÀûÀ¸·Î ±ÔÄ¢Àº ´ÙÀ½°ú °°ÀÌ »ý°å´Ù:

targets : dependencies
        command
        ...

¶Ç´Â ´ÙÀ½°ú °°ÀÌ »ý°å´Ù:

targets : dependencies ; command
        command
        ...

targets Àº °ø¹éÀ¸·Î ºÐ¸®µÈ ÆÄÀÏ À̸§µéÀÌ´Ù. ¿ÍÀϵåÄ«µå ¹®ÀÚµéÀÌ »ç¿ëµÉ ¼öµµ ÀÖÀ¸¸ç(see section ÆÄÀÏ À̸§¿¡ ¿ÍÀϵåÄ«µå »ç¿ë(Using Wildcard Characters in File Names)) `a(m)' ÇüÅÂÀÇ À̸§Àº archive ÆÄÀÏa(see section Ÿ°ÙÀ¸·Î½á ¾ÆÄ«ÀÌºê ¸â¹ö(Archive Members as Targets0)¾È¿¡ ÀÖ´Â ¸â¹ö mÀ» Ç¥ÇöÇÑ´Ù. ÀϹÝÀûÀ¸·Î ±ÔÄ¢ Çϳª´ç ÇϳªÀÇ Å¸°ÙÀÌ Á¸ÀçÇÏÁö¸¸ Á¾Á¾ Á» ´õ ¸¹Àº Ÿ°ÙµéÀ» °¡Áú ¼öµµ ÀÖ´Ù(see section ÇϳªÀÇ ±ÔÄ¢¾ÈÀÇ ´Ù¼öÀÇ Å¸°Ùµé(Multiple Targets in a Rule)).

command ¶óÀεéÀº ÅÇ ¹®ÀÚ·Î ½ÃÀÛÇÑ´Ù. ù¹ø° ¸í·ÉÀº Á¾¼Ó¹° ´ÙÀ½ ¶óÀο¡ ÅÇ ¹®ÀÚ¸¦ °¡Áø ¶óÀÎÀ¸·Î ³ªÅ¸³¯ ¼öµµ ÀÖ°í ¾Æ´Ï¸é ¼¼¹ÌÄÝ·ÐÀ» °¡Áø µ¿ÀÏÇÑ ¶óÀο¡ ³ªÅ¸³¯ ¼ö ÀÖ´Ù. ¾çÂÊ´Ù ±× È¿°ú´Â µ¿ÀÏÇÏ´Ù. See section ±ÔÄ¢³» ¸í·É ÀÛ¼º(Writing the Commands in Rules).

´Þ·¯ ±âÈ£µéÀº º¯¼ö ÂüÁ¶¸¦ ½ÃÀÛÇÏ´Â µ¥ »ç¿ëµÇ±â ¶§¹®¿¡ ¿©·¯ºÐÀÌ ½ÇÁ¦·Î ±ÔÄ¢¿¡¼­ ÇϳªÀÇ ´Þ·¯ ±âÈ£¸¦ ¾²°íÀÚ ÇÑ´Ù¸é ´Þ·¯ µÎ°³ `$$'¸¦ ¹Ýµå½Ã ½á¾ß ÇÑ´Ù(see section º¯¼ö »ç¿ë ¹æ¹ý(How to Use Variables)). ¿©·¯ºÐÀº ±â´Ù¶õ ¶óÀÎÀ» ¹é½½·¹½Ã ´õÇϱ⠰³Çà ¹®ÀÚ¸¦ ³Ö¾î¼­ ºÐÇÒÇÒ ¼ö ÀÖÁö¸¸ ÀÌ°ÍÀº ¹Ýµå½Ã ÇÊ¿äÇÑ °ÍÀÌ ¾Æ´Ï´Ù. ¿Ö³Ä¸é make°¡ makefileÀÇ °¢ ¶óÀÎÀÇ ÃÖ´ë ±æÀ̸¦ Á¦ÇÑÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù.

±ÔÄ¢Àº make¿¡°Ô µÎ°¡Áö °ÍÀ» ¸»ÇÑ´Ù: Ÿ°ÙµéÀÌ ¾ðÁ¦ out of dateÀΰ¡¿Í ±×°ÍµéÀ» ÇÊ¿äÇÒ ¶§ ¾î¶»°Ô ¾÷µ¥ÀÌÆ®ÇÒ °ÍÀΰ¡¸¦ ¸»ÇÑ´Ù.

out of dateÀÎÁö ¾Æ´ÑÁö¸¦ ÆÇ´ÜÇÏ´Â ±âÁØÀº DEPENDENCIES ¶ó´Â ¿ë¾î·Î ÁöÁ¤µÈ´Ù. ÀÌ°ÍÀº °ø¹éÀ¸·Î ºÐ¸®µÇ´Â ÆÄÀÏ À̸§µé·Î ±¸¼ºµÈ´Ù. (¿ÍÀϵåÄ«µåµé°ú ¾ÆÄ«ÀÌºê ¸â¹öµé(see section ¾ÆÄ«À̺ê ÆÄÀÏÀ» °»½ÅÇϱâ À§Çؼ­ make »ç¿ëÇϱâ(Using make to Update Archive Files))µµ ¿©±â¼­ ¿ª½Ã Çã¿ëµÈ´Ù.) Ÿ°ÙÀº ±×°ÍÀÌ Á¸ÀçÇÏÁö ¾Ê°Å³ª Á¾¼Ó¹°µéÁßÀÇ ¾î¶²°ÍÀÌ¶óµµ À̰ͺ¸´Ù ´õ ¿À·¡µÈ °ÍÀ̶ó¸é out of dateÀÌ´Ù(ÃÖÁ¾-º¯°æ ½Ã°£À» ºñ±³Çؼ­). Ÿ°Ù ÆÄÀÏÀÇ ³»¿ë¹°Àº Á¾¼Ó¹°µéÀÇ Á¤º¸¿¡ ±â¹ÝÀ» µÎ°í °è»êµÈ´Ù´Â »ý°¢¶§¹®¿¡ Á¾¼Ó¹°µé ÁßÀÇ Çϳª¶óµµ º¯°æµÇ¸é Á¸ÀçÇϴ Ÿ°ÙÀÇ ³»¿ë¹°Àº ´õÀÌ»ó À¯È¿ÇÑ °ÍÀÌ ¾Æ´Ï´Ù.

¾÷µ¥ÀÌÆ®ÇÏ´Â ¹æ¹ýÀº commands¿¡ ÀÇÇؼ­ ÁöÁ¤µÈ´Ù. À̵éÀº ½©¿¡ ÀÇÇؼ­ ½ÇÇàµÉ ¶óÀεéÀÌ´Ù(ÀϹÝÀûÀ¸·Î `sh'). ±×·¯³ª ¾î¶² ¿¹¿Ü ±â´ÉµéÀ» °¡Áø´Ù (see section ±ÔÄ¢³» ¸í·É ÀÛ¼º(Writing the Commands in Rules)).

ÆÄÀÏ À̸§¿¡ ¿ÍÀϵåÄ«µå »ç¿ë(Using Wildcard Characters in File Names)

ÇϳªÀÇ ÆÄÀÏ À̸§Àº wildcard charactersÀ» »ç¿ëÇؼ­ ¸¹Àº ÆÄÀϵéÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. make¿¡¼­ ¿ÍÀϵåÄ«µå ¹®ÀÚµéÀº º» ½©(Bourne shell)°ú µ¿ÀÏÇÏ°Ô `*', `?' ±×¸®°í `[...]'ÀÌ´Ù. ¿¹¸¦ µé¾î¼­, `*.c'´Â ±×°ÍÀÇ À̸§ÀÌ `.c'·Î ³¡³ª´Â ¸ðµç ÆÄÀϵé(ÇöÀç ÀÛ¾÷ µð·ºÅ丮 ¾È¿¡¼­)ÀÇ ¸®½ºÆ®¸¦ ÁöÁ¤ÇÑ´Ù.

ÆÄÀÏ À̸§ÀÇ ¸Ç óÀ½¿¡ ÀÖ´Â ¹®ÀÚ `~'´Â Ư¼öÇÑ Á߿伺À» °¡Áø´Ù. È¥ÀÚ Á¸ÀçÇϰųª µÚ¿¡ slash°¡ µû¶ó¿À¸é, ±×°ÍÀº ¿©·¯ºÐÀÇ È¨ µð·ºÅ丮¸¦ °¡¸£Å²´Ù. ¿¹¸¦ µé¾î¼­ `~/bin'Àº `/home/you/bin'À¸·Î È®ÀåµÈ´Ù. `~' ´ÙÀ½¿¡ ´Ü¾î Çϳª°¡ ºÙÀ¸¸é ÀÌ ¹®ÀÚ¿­Àº ±× ´Ü¾î·Î ÁöÁ¤µÈ »ç¿ëÀÚÀÇ È¨ µð·ºÅ丮¸¦ Ç¥ÇöÇÑ´Ù. ¿¹¸¦ µé¾î¼­ `~john/bin'Àº `/home/john/bin'·Î È®ÀåµÈ´Ù. °¢ À¯Àú¿¡ ´ëÇÑ È¨ µð·ºÅ丮¸£ °®Áö ¸øÇÏ´Â ½Ã½ºÅÛµé(MS-DOS³ª MS-Windows¿Í °°ÀÌ)¿¡¼­ ÀÌ ±â´ÉÀº ȯ°æ º¯¼ö HOME¸¦ ¼³Á¤ÇÔÀ¸·Î½á ºñ½ÁÇÏ°Ô ÀÛµ¿µÉ ¼ö ÀÖ´Ù.

¿ÍÀϵåÄ«µå È®ÀåÀº Ÿ°Ù, Á¾¼Ó¹°, ±×¸®°í ¸í·É(¿©±â¼­´Â ½©ÀÌ È®ÀåÀ» ÇÑ´Ù)¿¡¼­ ÀÚµ¿À¸·Î ÀϾ´Ù. ´Ù¸¥ À§Ä¡¿¡¼­ ¿ÍÀϵåÄ«µå È®ÀåÀº ¿©·¯ºÐÀÌ È®ÀåÀÌ ÀϾµµ·Ï wildcardÇÔ¼ö·Î ¸í½ÃÇßÀ» ¶§¿¡¸¸ ÀϾ´Ù.

¿ÍÀϵåÄ«µå ¹®ÀÚÀÇ Æ¯º°ÇÑ ¿ëµµ´Â ±× ¾Õ¿¡´Ù ¿ª½½·¡½¯¸£ ºÙÀÓÀ¸·Î½á ²¨Áú¼ö ÀÖ´Ù. ±×·¡¼­ `foo\*bar'´Â ±×°ÍÀÇ À̸§ÀÌ `foo', º°Ç¥, ±×¸®°í `bar'À¸·Î ÀÌ·ç¾îÁø À̸§ÀÇ Æ¯Á¤ ÆÄÀÏÀ» ÂüÁ¶ÇÏ´Â °ÍÀÌ µÉ°ÍÀÌ´Ù.

¿ÍÀϵåÄ«µå ¿¹Á¦(Wildcard Examples)

¿ÍÀϵåÄ«µåµéÀº ±ÔÄ¢ÀÇ ¸í·É¿¡¼­ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ°÷¿¡¼­ ±×µéÀº ½©¿¡ ÀÇÇؼ­ È®ÀåµÈ´Ù. ¿¹¸¦ µé¾î¼­ ¸ðµç ¿ÀºêÁ§Æ® ÆÄÀϵéÀ» »èÁ¦ÇÏ´Â ±ÔÄ¢À» º¸ÀÚ:

clean:
        rm -f *.o

¿ÍÀϵåÄ«µåµéÀº ±ÔÄ¢ÀÇ Á¾¼Ó¹°¿¡¼­µµ À¯¿ëÇÏ´Ù. makefileÀÇ ´ÙÀ½ ±ÔÄ¢¿¡¼­ `make print' ´Â ¿©·¯ºÐÀÌ ±×°ÍµéÀ» ÀμâÇÑ ¸¶Áö¸· ½Ã°£ ÀÌÈÄ·Î º¯°æµÈ ¸ðµç `.c' ÆÄÀϵéÀ» ÀμâÇÒ °ÍÀÌ´Ù:

print: *.c
        lpr -p $?
        touch print

ÀÌ ±ÔÄ¢Àº `print'¸¦ ºó Ÿ°Ù ÆÄÀÏ·Î »ç¿ëÇÑ´Ù; section À̺¥Æ®¸¦ ±â·ÏÇϱâ À§ÇÑ ºó Ÿ°Ù ÆÄÀÏ(Empty Target Files to Record Events), ÂüÁ¶. (ÀÚµ¿ º¯¼ö `$?'´Â º¯°æµÈ ÆÄÀϵ鸸 ÀμâÇÏ´Â µ¥ »ç¿ëµÈ´Ù; section ÀÚµ¿ º¯¼öµé(Automatic Variables), ÂüÁ¶.)

¿©·¯ºÐÀÌ º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§´Â ¿ÍÀϵåÄ«µå È®ÀåÀÌ ÀϾÁö ¾Ê´Â´Ù. ±×·¡¼­ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇϸé:

objects = *.o

objects¶ó´Â º¯¼öÀÇ °ªÀº `*.o'¶ó´Â ½ÇÁ¦ÀûÀÎ ¹®ÀÚ¿­ÀÌ µÈ´Ù. ±×·¯³ª objectsÀÇ °ªÀ» Ÿ°Ù¿¡¼­ »ç¿ëÇÑ´Ù¸é Á¾¼Ó¹°À̳ª ¸í·É, ¿ÍÀϵåÄ«µå È®ÀåÀº ±× ¶§ ÀϾ´Ù. objects¸¦ È®ÀåµÇ°Ô ¼³Á¤ÇÏ·Á¸é ´ë½Å ´ÙÀ½°ú °°ÀÌ ½á¾ß ÇÑ´Ù:

objects := $(wildcard *.o)

See section wildcard ÇÔ¼ö(The Function wildcard).

¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇÒ ¶§ °áÁ¡(Pitfalls of Using Wildcards)

´ÙÀ½Àº ¿©·¯ºÐÀÌ ÀǵµÇÑ ¹Ù´ë·Î ÀÛµ¿ÇÏÁö ¾ÊÀ», ¿ÍÀϵåÄ«µå È®ÀåÀ» »ç¿ëÇÏ´Â ¼Ò¹ÚÇÑ ¹æ½ÄÀÇ ¿¹Á¦ÀÌ´Ù. ¿©·¯ºÐÀÌ ½ÇÇà ÆÄÀÏ `foo'°¡ ¸ðµç ¿ÀºêÁ§Æ® ÆÄÀϵé·ÎºÎÅÍ ¸¸µé¾îÁöµµ·Ï Çϱ⸦ ¿øÇÏ°í ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇß´Ù°í °¡Á¤ÇÏÀÚ:

objects = *.o

foo : $(objects)
        cc -o foo $(CFLAGS) $(objects)

objectsÀÇ °ªÀº ½ÇÁ¦ ¹®ÀÚ¿­ `*.o'ÀÌ´Ù. ¿ÍÀϵåÄ«µå È®ÀåÀº `foo'¸¦ À§ÇÑ ±ÔÄ¢¿¡¼­ ÀϾ´Ù. ±×·¡¼­ °¢ ÇöÁ¸ÇÏ´Â `.o' ÆÄÀÏÀº `foo'ÀÇ Á¾¼Ó¹°ÀÌ µÇ°í, ÇÊ¿äÇÏ´Ù¸é ÀçÄÄÆÄÀ쵃 °ÍÀÌ´Ù.

±×·±µ¥ ¿©·¯ºÐÀÌ ¸ðµç `.o' ÆÄÀϵéÀ» Áö¿ö¹ö·È´Ù¸é ¾î¶»°Ô µÉ °ÍÀΰ¡. ¿ÍÀϵåÄ«µå°¡ ¾î¶² ÆÄÀÏ°úµµ ¸ÅÄ¡µÇÁö ¾ÊÀ¸¸é ÀÌ°ÍÀº ÀÖ´Â ±×´ë·Î ³²°Ô µÈ´Ù. ±×·¡¼­ `foo'Àº ÀÌ»óÇÑ À̸§ÀÇ ÆÄÀÏ `*.o'¿¡ ÀÇÁ¸ÇÏ°Ô µÉ °ÍÀÌ´Ù. ¾î¶² ±×·± ÆÄÀϵµ Á¸ÀçÇÏÁö ¾ÊÀ»°ÍÀ̱⠶§¹®¿¡ make´Â ¿©·¯ºÐ¿¡ `*.o'¸¦ ¸¸µå´Â ¹æ¹ýÀ» ¾Ë¼ö°¡ ¾ø´Ù´Â ¿¡·¯¸¦ ³¾ °ÍÀÌ´Ù. ÀÌ°ÍÀº ¿©·¯ºÐÀÌ ¿øÇÏ´Â °ÍÀÌ ¾Æ´Ï´Ù!

½ÇÁ¦·Î ¿ÍÀϵåÄ«µå È®ÀåÀÇ ¿øÇÏ´Â °á°ú¸¦ ¾ò´Â °ÍÀÌ °¡´ÉÇÏÁö¸¸, wildcard ÇÔ¼ö¿Í ¹®ÀÚ¿­ ġȯ(substitution)À» Æ÷ÇÏÇÏ¿©, Á» ´õ º¹ÀâÇÑ ±â¼úµéÀÌ ÇÊ¿äÇÑ´Ù. À̰͵éÀº ´ÙÀ½ ¼½¼Ç¿¡¼­ ¼³¸íµÈ´Ù.

¸¶ÀÌÅ©·Î¼ÒÇÁÆ® ¿î¿µÃ¼Á¦(MS-DOS¿Í MS-Windows)´Â ¿ª½½·¡½¬¸¦ ´ÙÀ½°ú °°ÀÌ °æ·Î¸í¿¡¼­ µð·ºÅ丮µéÀ» ±¸ºÐÇÏ´Â °ÍÀ¸·Î »ç¿ëÇÑ´Ù:

  c:\foo\bar\baz.c

ÀÌ°ÍÀº À¯´Ð½º-½ºÅ¸ÀÏ `c:/foo/bar/baz.c' (`c:' ºÎºÐÀº ¼ÒÀ§ µå¶óÀÌºê ¹®ÀÚÀÌ´Ù)¿Í µ¿ÀÏÇÏ´Ù. make°¡ ÀÌ·± ½Ã½ºÅÛµé À§¿¡¼­ ÀÛµ¿ÇÒ ¶§ °æ·Î¸í¿¡¼­ À¯´Ð½º-½ºÅ¸ÀÏ ½½·¡½¬¿Í ÇÔ²² ¿ª½½·¡½¬µéÀ» Áö¿øÇÑ´Ù. ±×·¯³ª ÀÌ·± Áö¿øÀº ¿ª½½·¡½¬°¡ ÀοëºÎÈ£ÀÎ, ¿ÍÀϵåÄ«µå È®ÀåÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î ¿©·¯ºÐÀº ¹Ýµå½Ã ÀÌ·± °æ¿ì¿¡ À¯´Ð½º-½ºÅ¸ÀÏ ½½·¡½¬µéÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.

wildcard ÇÔ¼ö(The Function wildcard)

¿ÍÀϵå Ä«µå´Â ±ÔÄ¢ ¾È¿¡¼­ ÀÚµ¿À¸·Î È®ÀåµÈ´Ù. ±×·¯³ª ¿ÍÀϵå Ä«µå È®ÀåÀº ÀϹÝÀûÀ¸·Î º¯¼ö°¡ ¼³Á¤µÇ¾úÀ» ¶§, ¶Ç´Â ÇÔ¼öÀÇ ¸Å°³º¯¼ö ¾È¿¡¼­´Â, ÀϹÝÀûÀ¸·Î ÀϾÁö ¾Ê´Â´Ù. ±×·± Àå¼Ò¿¡¼­ ¿ÍÀϵåÄ«µå È®ÀåÀ» ÇÏ·Á°í ÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ wildcard ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

$(wildcard pattern...)

makefile¾ÈÀÇ ¾î¶² °÷¿¡¼­µµ »ç¿ëµÇ´Â ÀÌ ¹®ÀÚ¿­Àº ÁÖ¾îÁø ÆÄÀÏ À̸§ ÆÐÅϵé ÁßÀÇ Çϳª¿Í ¸ÅÄ¡µÇ´Â ÇöÁ¸ÇÏ´Â ÆÄÀϵé À̸§µéÀÇ °ø¹éÀ¸·Î ºÐ¸®µÈ ¸®½ºÆ®¿¡ ÀÇÇؼ­ ´ëüµÈ´Ù. ¾î¶² ÆÄÀÏ À̸§µµ ÆÐÅÏ°ú ¸ÅÄ¡µÇ´Â °ÍÀÌ ¾øÀ¸¸é ±× ÆÐÅÏÀº wildcard ÇÔ¼öÀÇ °á°ú·ÎºÎÅÍ Á¦°ÅµÈ´Ù. ÀÌ°ÍÀº ±ÔÄ¢¾È¿¡¼­ ¸ÅÄ¡µÇÁö ¾ÊÀº ¿ÍÀϵåÄ«µå°¡ ÇൿÇÏ´Â ¹æ½Ä°ú ´Ù¸£´Ù´Â Á¡¿¡ ÁÖÀÇÇÏÀÚ. ¿©±â¼­ ±×µéÀº ¹«½ÃµÈ´Ù±âº¸´Ù´Â ÀÖ´Â ±×´ë·Î »ç¿ëµÈ´Ù(see section ¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇÒ ¶§ °áÁ¡(Pitfalls of Using Wildcards)).

wildcard ÇÔ¼öÀÇ ÇÑ°¡Áö »ç¿ë¹ýÀº ÇÑ µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç C ¼Ò½º ÆÄÀϵéÀÇ ¸®½ºÆ®¸¦ ȹµæÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ:

$(wildcard *.c)

¿ì¸®´Â C ¼Ò½º ÆÄÀϵéÀÇ ¸®½ºÆ®¸¦ `.c' Á¢¹Ì»ç¸¦ `.o'·Î º¯°æÇؼ­ ¿ÀºêÁ§Æ® ÆÄÀϵéÀÇ ¸®½ºÆ®·Î º¯°æÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ:

$(patsubst %.c,%.o,$(wildcard *.c))

(¿©±â¼­ ¿ì¸®´Â ´Ù¸¥ ÇÔ¼ö patsubst¸¦ »ç¿ëÇß´Ù. See section ¹®ÀÚ ´ëÀÔ°ú ºÐ¼®À» À§ÇÑ ÇÔ¼öµé(Functions for String Substitution and Analysis).)

±×·¡¼­ ÇÑ µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç C ÆÄÀϵéÀ» ÄÄÆÄÀÏÇÏ°í À̵éÀ» ¸ðµÎ ¸ð¾Æ¼­ ¸µÅ©ÇÏ·Á°í ÇÏ´Â makefileÀº ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºµÉ ¼ö ÀÖ´Ù:

objects := $(patsubst %.c,%.o,$(wildcard *.c))

foo : $(objects)
        cc -o foo $(objects)

(ÀÌ°ÍÀº C ÇÁ·Î±×·¥µé¿¡ ´ëÇÑ ¹¬½ÃÀû ±ÔÄ¢À» È°¿ëÇÏ°í ÀÖ´Ù. ±×·¡¼­ ÆÄÀϵéÀ» ÄÄÆÄÀÏÇÏ´Â ¸í½ÃÀû ±ÔÄ¢µéÀ» ÀÛ¼ºÇÒ ÇÊ¿ä°¡ ¾ø´Ù. `='ÀÇ º¯Á¾ÀÎ `:='¿¡ ´ëÇÑ ¼³¸íÀ» º¸·Á¸é See section º¯¼öÀÇ µÎ ÃëÇâ(The Two Flavors of Variables).)

Á¾¼Ó¹°À» À§ÇÑ µð·ºÅ丮 °Ë»ö(Searching Directories for Dependencies)

Ä¿´Ù¶õ ½Ã½ºÅÛµéÀÇ °æ¿ì ¹ÙÀ̳ʸ®µé°ú ´Ù¸¥ µð·ºÅ丮¿¡ ¼Ò½ºµéÀ» ³Ö´Â °ÍÀÌ Á¾Á¾ ¹Ù¶÷Á÷ÇÏ´Ù. makeÀÇ directory search ±â´ÉÀº Á¾¼Ó¹°(dependency)À» ã±â À§Çؼ­ ¿©·¯ µð·ºÅ丮µéÀ» ÀÚµ¿À¸·Î °Ë»öÇÔÀ¸·Î½á ÀÌ°ÍÀ» Áö¿øÇÑ´Ù. ¿©·¯ºÐÀÌ µð·ºÅ丮µé »çÀÌ·Î ÆÄÀϵéÀ» Àç¹èÆ÷ÇÒ ¶§ ¿©·¯ºÐÀº °³º° ±ÔÄ¢µéÀ» º¯°æÇÒ ÇÊ¿ä°¡ ¾ø°í °Ë»ö Æнºµé¸¸ º¯°æÇÏ¸é µÈ´Ù.

VPATH: ¸ðµç Á¾¼Ó¹°¿¡ ´ëÇÑ °Ë»ö Æнº(Search Path for All Dependencies)

makeÀÇ º¯¼ö VPATHÀÇ °ªÀº make°¡ °Ë»öÇÒ µð·ºÅ丮µéÀÇ ¸®½ºÆ®¸¦ ÁöÁ¤ÇÑ´Ù. ´ë°³ÀÇ °æ¿ì ÀÌ µð·ºÅ丮µéÀº ÇöÀç µð·ºÅ丮¿¡´Â ¾ø´Â Á¾¼Ó ÆÄÀϵéÀ» ´ã°í ÀÖÀ» °ÍÀÌ´Ù; ±×·¯³ª VPATH´Â ±ÔÄ¢µéÀÇ Å¸°ÙµéÀÎ ÆÄÀϵéÀ» Æ÷ÇÔÇؼ­ ¸ðµç ÆÄÀϵ鿡 ´ëÇؼ­ make°¡ Àû¿ëÇÏ´Â °Ë»ö ¸®½ºÆ®¸¦ ÁöÁ¤ÇÑ´Ù.

±×·¡¼­ Ÿ°ÙÀ̳ª Á¾¼Ó¹°·Î ¸®½ºÆ®µÈ ¾î¶² ÆÄÀÏÀÌ ÇöÀç µð·ºÅ丮¿¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é make´Â VPATH¿¡ ÀÖ´Â µð·ºÅ丮µéÀ» °Ë»öÇÑ´Ù. ÀÌ µð·ºÅ丮µé Áß Çϳª¿¡¼­ ¾î¶² ÆÄÀÏÀÌ ÀÖÀ¸¸é ±× ÆÄÀÏÀº Á¾¼Ó¹°ÀÌ µÉ °ÍÀÌ´Ù (¾Æ·¡¸¦ ÂüÁ¶) ±ÔÄ¢µéÀº ±×·¯¸é, Á¾¼Ó¹° ¸®½ºÆ®¾È¿¡ ÀÖ´Â ÆÄÀϵéÀÌ ¸ðµÎ ÇöÀç µð·ºÅ丮¿¡ ÀÖ´Â °Íó·³ À̵éÀ» ÁöÁ¤ÇÒ °ÍÀÌ´Ù. See section µð·ºÅ丮 °Ë»ö ½© ¸í·É ÀÛ¼º(Writing Shell Commands with Directory Search).

VPATH º¯¼ö¾È¿¡ µð·ºÅ丮 À̸§µéÀº ÄÝ·ÐÀ̳ª °ø¹éµé·Î ±¸ºÐµÈ´Ù. µð·ºÅ丮µéÀÌ ³ª¿­µÈ ¼ø¼­·Î make°¡ °Ë»öÇÑ´Ù. (MS-DOS¿Í MS-Windows¿¡¼­´Â ¼¼¹Ì-ÄݷеéÀÌ VPATH¿¡¼­ µð·ºÅ丮 À̸§µéÀ» ±¸ºÐÇÏ´Â µ¥ »ç¿ëµÈ´Ù. ¿Ö³Ä¸é ÄÝ·ÐÀÌ µå¶óÀÌºê ¸í µÚ¿¡¼­ °æ·Î¸í ÀÚü¿¡¼­ »ç¿ëµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù.)

¿¹¸¦ µé¾î¼­,

VPATH = src:../headers

ÀÌ°ÍÀº make°¡ ÀÌ ¼ø¼­·Î °Ë»öÇÏ´Â, µÎ µð·ºÅ丮µé, `src'°ú `../headers', À» ´ã°í ÀÖ´Â °æ·Î¸¦ ÁöÁ¤ÇÏ°í ÀÖ´Ù.

VPATHÀÇ ÀÌ·± °ªÀ¸·Î ´ÙÀ½ ±ÔÄ¢Àº

foo.o : foo.c

ÀÌ°ÍÀÌ ´ÙÀ½°ú °°ÀÌ ¾²¿©Áø °Íó·³ Çؼ®µÈ´Ù:

foo.o : src/foo.c

ÆÄÀÏ `foo.c'ÀÌ ÇöÀç µð·ºÅ丮¿¡´Â ¾øÁö¸¸ `src' µð·ºÅ丮¿¡ ÀÖ´Â °ÍÀ¸·Î °¡Á¤Çϸ鼭 ¸»ÀÌ´Ù.

vpath Áö½Ã¾î

VPATH º¯¼ö¿Í ºñ½ÁÇÏ°Ô, Á» ´õ ¼±ÅÃÀûÀÌ°Ô, vpath¶ó´Â Áö½Ã¾î(¼Ò¹®ÀÚ¸¦ ÁÖ¸ñÇÏÀÚ)°¡ ÀÖ´Ù. ÀÌ°ÍÀº ¿©·¯ºÐÀÌ Æ¯Á¤ÇÑ Å¬·¡½ºÀÇ ÆÄÀÏ À̸§µéÀ» À§ÇÑ °Ë»ö °æ·Î¸¦ ÁöÁ¤Çϵµ·Ï Çã¶ôÇÑ´Ù: ƯÁ¤ ÆÐÅÏ°ú ¸ÅÄ¡µÇ´Â °Íµé. ±×·¡¼­ ¿©·¯ºÐÀº ÇÑ Å¬·¡½ºÀÇ ÆÄÀÏ À̸§µéÀ» À§ÇÑ °Ë»ö µð·ºÅ丮µéÀ», ´Ù¸¥ ÆÄÀÏ À̸§µé¿¡ ´ëÇؼ­ ´Ù¸¥ µð·ºÅ丮µé(¶Ç´Â ¾Æ¹«°Íµµ ÁöÁ¤ÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù)À» Á¦°øÇÒ ¼ö ÀÖ´Ù.

vpath Áö½Ã¾î´Â ´ÙÀ½°ú °°Àº ¼¼°¡Áö ÇüÅ°¡ ÀÖ´Ù:

vpath pattern directories
ÀÌ°ÍÀº pattern¿Í ¸ÅÄ¡µÇ´Â ÆÄÀÏ À̸§µé¿¡ ´ëÇÑ °Ë»ö °æ·Î directories¸¦ ÁöÁ¤ÇÑ´Ù. directories¶ó´Â °Ë»ö °æ·Î´Â °Ë»öµÉ µð·ºÅ丮µéÀÇ ¸®½ºÆ®À̸ç, VPATH º¯¼ö¿¡¼­ »ç¿ëµÈ °Ë»ö °æ·Î¿Í ºñ½ÁÇÏ°Ô, ÄÝ·Ð(MS-DOS¿Í MS-Windows¿¡ ´ëÇؼ­´Â ¼¼¹Ì-ÄÝ·Ð)°ú °ø¹éµé¿¡ ÀÇÇؼ­ ±¸ºÐµÈ´Ù.
vpath pattern
ÀÌ°ÍÀº pattern¿¡ ¿¬°áµÈ °Ë»ö °æ·Î¸¦ û¼ÒÇÏ´Ù.
vpath
ÀÌ°ÍÀº vpath Áö½Ã¾î·Î ÀÌÀü¿¡ ÁöÁ¤µÈ¹Ù ÀÖ´ø ¸ðµç °Ë»ö °æ·ÎµéÀ» »èÁ¦ÇÑ´Ù.

vpath ÆÐÅÏÀº `%' ¹®ÀÚ¸¦ ´ã°í ÀÖ´Â ¹®ÀÚ¿­ÀÌ´Ù. ÀÌ ¹®ÀÚ¿­Àº °Ë»ö´ë»óÀÎ Á¾¼Ó¹°ÀÇ ÆÄÀÏ À̸§°ú ¹Ýµå½Ã ¸ÅÄ¡µÇ¾î¾ß Çϸç `%' ¹®ÀÚ´Â 0°³ ¶Ç´Â ±×ÀÌ»óÀÇ ¹®ÀÚµéÀÇ ÀÓÀÇÀÇ ½ÃÄö½º¿Í ¸ÅÄ¡µÇ´Â °ÍÀÌ´Ù(ÆÐÅÏ ±ÔÄ¢¿¡¼­¿Í ºñ½ÁÇÏ´Ù; see section ÆÐÅÏ ±ÔÄ¢À» Á¤ÀÇÇÏ°í ÀçÁ¤Çϱâ(Defining and Redefining Pattern Rules)). ¿¹¸¦ µé¾î¼­ %.h´Â .h·Î ³¡³ª´Â ÆÄÀϵé°ú ¸ÅÄ¡µÈ´Ù. (¾î¶² `%'µµ ¾ø´Ù¸é ÆÐÅÏ ±ÔÄ¢Àº ¹Ýµå½Ã Á¾¼Ó¹°°ú Á¤È®ÇÏ°Ô ¸ÅÄ¡µÇ¾î¾ß ÇÑ´Ù. ÀÌ·±°ÍÀº À¯¿ëÇÑ °ÍÀÌ ¾Æ´Ï´Ù.)

vpath Áö½Ã¾îÀÇ ÆÐÅÏ¿¡ ÀÖ´Â `%' ¹®ÀÚ´Â ¾Õ¿¡ ¿ª½½·¡½¬ (`\')·Î ÀοëµÉ ¼ö ÀÖ´Ù. ´Ù¸¥ ½ÄÀ¸·Î `%' ¹®ÀÚµéÀ» ÀοëÇÒ ¼ö ÀÖ´Â ¿ª½½·¡½¬µéÀº Á» ´õ ¸¹Àº ¿ª½½·¡½¬µé·Î ÀοëµÉ ¼ö ÀÖ´Ù. `%' ¹®ÀÚµéÀ» ÀοëÇÏ´Â ¿ª½½·¡½¬µéÀ̳ª ´Ù¸¥ ¿ª½½·¡½¬µéÀº ÆÐÅÏ¿¡¼­ ÀÌ°ÍÀÌ ÆÄÀÏ À̸§µé°ú ºñ±³µÇ±â Àü¿¡ Á¦°ÅµÈ´Ù. `%' ¹®ÀÚµéÀ» ÀοëÇÏ´Â À§Çè¿¡ ÀÖÁö ¾Ê´Â ¿ª½½·¡½¬µéÀº °£¼·¹ÞÁö ¾Ê´Â´Ù.

Á¾¼Ó¹°µéÀÌ ÇöÀç µð·ºÅ丮¿¡ Á¸ÀçÇÏÁö ¾ÊÀ»¶§, vpath Áö½Ã¾î ¾ÈÀÇ patternÀÌ Á¾¼Ó¹° ÆÄÀÏÀÇ À̸§°ú ¸ÅÄ¡µÈ´Ù¸é, ±× Áö½Ã¾î ¾ÈÀÇ directories´Â VPATH º¯¼ö¾ÈÀÇ µð·ºÅ丮¿Í µ¿ÀÏÇÏ°Ô(±×¸®°í ±× ÀÌÀü¿¡) °Ë»öµÈ´Ù.

¿¹¸¦ µé¾î¼­

vpath %.h ../headers

ÀÌ°ÍÀº make°¡ `.h'·Î ³¡³ª´Â À̸§ÀÇ Á¾¼Ó¹°ÀÌ ÇöÀç µð·ºÅ丮¿¡ ¾øÀ¸¸é `../headers' µð·ºÅ丮¿¡¼­ ãµµ·Ï ¸»ÇÑ´Ù.

¸î°¡Áö vpath ÆÐÅϵéÀÌ Á¾¼Ó¹° ÆÄÀÏÀÇ À̸§°ú ¸ÅÄ¡µÈ´Ù¸é make´Â °¢ ¸ÅÄ¡µÇ´Â vpath Áö½Ã¾î¸¦ Çϳª¾¿ ó¸®Çϸ鼭 °¢ Áö½Ã¾î ³»¿¡¼­ ¾ð±ÞµÈ ¸ðµç µð·ºÅ丮µéÀ» °Ë»öÇÑ´Ù. make´Â ´Ù¼öÀÇ vpath Áö½Ã¾îµéÀ» ±×µéÀÌ makefile¿¡ ³ªÅ¸³­ ¼ø¼­´ë·Î ó¸®ÇÑ´Ù; µ¿ÀÏÇÑ ÆÐÅÏÀ» °®´Â ´Ù¼öÀÇ Áö½Ã¾îµéÀº °¢°¢ ´Ù¸¥ °Í¿¡ ´ëÇؼ­ µ¶¸³ÀûÀÌ´Ù.

±×·¡¼­

vpath %.c foo
vpath %   blish
vpath %.c bar

ÀÌ°ÍÀº `foo'¿¡¼­ `.c'·Î ³¡³ª´Â ÆÄÀÏÀ» ãÀ» °ÍÀÌ°í ±× ´ÙÀ½¿¡´Â `blish', ±× ´ÙÀ½¿¡´Â `bar'¸¦ ãÀ» °ÍÀÌ´Ù. ¹Ý¸é¿¡ ´ÙÀ½

vpath %.c foo:bar
vpath %   blish

´Â `foo'¿¡¼­ `.c'·Î ³¡³ª´Â ÆÄÀÏÀ» ãÀ» °ÍÀÌ´Ù. ±× ´ÙÀ½Àº `bar', ±×¸®°í `blish'¸¦ ãÀ» °ÍÀÌ´Ù.

µð·ºÅ丮 °Ë»öÀÌ ¼öÇàµÇ´Â ¹æ¹ý(How Directory Searches are Performed)

¾î¶² Á¾¼Ó¹°ÀÌ µð·ºÅ丮 °Ë»ö¿¡¼­ ã¾ÆÁú ¶§ ŸÀÔ(general ¶Ç´Â selective)¿¡ »ó°ü¾øÀÌ Ã£¾ÆÁø ÆнºÀ̸§Àº make°¡ ½ÇÁ¦·Î Á¾¼Ó¹° ¸®½ºÆ®¿¡¼­ Á¦°øÇÑ °Íµé ÁßÀÇ Çϳª°¡ ¾Æ´Ò ¼ö ÀÖ´Ù. °£È¤ µð·ºÅ丮 °Ë»öÀ» ÅëÇؼ­ ã¾ÆÁø Æнº´Â ¹ö·ÁÁø´Ù.

make°¡ µð·ºÅ丮 °Ë»öÀ» ÅëÇؼ­ ãÀº Æнº¸¦ °£Á÷Çϴ°¡ ¾Æ´Ï¸é ¹ö¸®´Â°¡¸¦ °áÁ¤ÇÏ´Â µ¥ »ç¿ëÇÏ´Â ¾Ë°í¸®ÁòÀº ´ÙÀ½°ú °°´Ù:

  1. Ÿ°Ù ÆÄÀÏÀÌ makefile¿¡¼­ ÁöÁ¤ÇÑ Æнº¿¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é µð·ºÅ丮 °Ë»öÀÌ ¼öÇàµÈ´Ù.
  2. µð·ºÅ丮 °Ë»öÀÌ ¼º°øÀûÀÌ¸é ±× Æнº´Â °£Á÷µÇ°í ÀÌ ÆÄÀÏÀº ½ÃÇèÀûÀ¸·Î Ÿ°ÙÀ¸·Î ÀúÀåµÈ´Ù.
  3. ÀÌ Å¸°ÙÀÇ ¸ðµç Á¾¼Ó¹°µéÀº ÀÌ·± µ¿ÀÏÇÑ ¹æ¹ýÀ» »ç¿ëÇؼ­ ½ÃÇèµÈ´Ù.
  4. Á¾¼Ó¹°µéÀ» ó¸®ÇÑ ÈÄ, Ÿ°ÙÀº Àçºôµå°¡ µÉ ÇÊ¿ä°¡ Àְųª ±×·¸Áö ¾Ê´Ù:
    1. Ÿ°ÙÀÌ ÀçºôµåµÉ ÇÊ¿ä°¡ ¾ø´Ù¸é, µð·ºÅ丮 °Ë»ö µ¿¾È ã¾ÆÁø ÆÄÀÏ¿¡ ´ëÇÑ °æ·Î´Â, ÀÌ·± Ÿ°ÙÀ» Æ÷ÇÔÇÏ´Â ÀÓÀÇÀÇ Á¾¼Ó¹° ¸®½ºÆ®¿¡ »ç¿ëµÈ´Ù. °£´ÜÈ÷ ¸»Çؼ­ make°¡ Ÿ°ÙÀ» ÀçºôµåÇÒ ÇÊ¿ä°¡ ¾ø´Ù¸é ¿©·¯ºÐÀº µð·ºÅ丮 °Ë»öÀ» ÅëÇؼ­ ã¾ÆÁø Æнº¸¦ »ç¿ëÇÑ´Ù.
    2. Ÿ°ÙÀÌ ÀçºôµåµÉ ÇÊ¿ä°¡ ÀÖÀ¸¸é (out-of-dateÀ̸é), µð·ºÅ丮 °Ë»öµ¿¾È ã¾ÆÁø °æ·Î¸íÀº ¹ö·ÁÁö°í, Ÿ°ÙÀº makefile¿¡¼­ ÁöÁ¤µÈ ÆÄÀÏ À̸§À» »ç¿ëÇÏ¿© ÀçºôµåµÈ´Ù. °£´ÜÈ÷ ¸»Çϸé make°¡ ¹Ýµå½Ã ÀçºôµåÇØ¾ß ÇÑ´Ù¸é Ÿ°ÙÀº ·ÎÄ÷ΠÀçºôµåµµ±â¤Ç µð·ºÅ丮 °Ë»öÀ» ÅëÇؼ­ ã¾ÆÁø µð·ºÅ丮¿¡¼­´Â ÀçºôµåµÇÁö ¾Ê´Â´Ù.

ÀÌ ¾Ë°í¸®ÁòÀº º¹ÀâÇÏ°Ô º¸Àϼö ÀÖÁö¸¸ ½ÇÁ¦·Î ÀÌ°ÍÀº ¿©·¯ºÐÀÌ ¿øÇÏ´Â °Í°ú ¿ÏÀüÈ÷ ¶È°°Àº °æ¿ì°¡ ¸¹´Ù.

´Ù¸¥ make ¹öÀüµéÀº Á» ´õ ´Ü¼øÇÑ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÑ´Ù: ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê°í µð·ºÅ丮 °Ë»öÀ» ÅëÇؼ­ ã¾ÆÁö¸é ±× °æ·Î¸íÀº Ç×»ó, Ÿ°ÙÀÌ ºôµåµÇ¾î¾ß Çϴ°¡ ¶Ç´Â ÇÏÁö ¾Ê¾Æµµ µÇ´Â°¡¿¡ µû¶ó¼­ »ç¿ëµÈ´Ù. ±×·¡¼­ Ÿ°ÙÀÌ ÀçºôµåµÇ¸é ÀÌ°ÍÀº µð·ºÅ丮 °Ë»ö µ¿¾È ¹ß°ßµÈ °æ·Î¸í¿¡¼­ »ý¼ºµÈ´Ù.

»ç½Ç, ÀÌ°ÍÀÌ ¿©·¯ºÐÀÌ ¾î¶² ¶Ç´Â ¸ðµç µð·ºÅ丮µé¿¡ ´ëÇؼ­ ¿øÇÏ´Â ÇൿÀ̶ó¸é, ¿©·¯ºÐÀº GPATH º¯¼ö¸¦ »ç¿ëÇؼ­ ÀÌ°ÍÀ» maek¿¡°Ô ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

GPATH´Â VPATH¿Í µ¿ÀÏÇÑ ¹®¹ý°ú Æ÷¸äÀ» °¡Áø´Ù (Áï, °æ·Î¸íµéÀÇ °ø¹é ¶Ç´Â ÄÝ·ÐÀ¸·Î ±¸ºÐµÈ ¸®½ºÆ®). out-of-date Ÿ°ÙÀÌ µð·ºÅ丮 °Ë»öÀ» ÅëÇؼ­ GPATH¿¡ ÀÖ´Â ¾î¶² µð·ºÅ丮¿¡¼­ ã¾ÆÁø °ÍÀ̶ó¸é ±× °æ·Î¸íÀº ¹ö·ÁÁöÁö ¾Ê´Â´Ù. Ÿ°ÙÀº È®ÀåµÈ °æ·Î¸¦ »ç¿ëÇؼ­ ÀçºôµåµÈ´Ù.

µð·ºÅ丮 °Ë»ö ½© ¸í·É ÀÛ¼º(Writing Shell Commands with Directory Search)

Á¾¼Ó¹°(dependency)ÀÌ µð·ºÅ丮 °Ë»öÀ» ÅëÇؼ­ ´Ù¸¥ µð·ºÅ丮¿¡¼­ ã¾ÆÁú ¶§, ÀÌ°ÍÀº ±× ±ÔÄ¢ÀÇ ¸í·Éµé¤·¸£ º¯°æÇÒ ¼ö ¾ø´Ù; ±×µéÀº ÀÛ¼ºµÈ ´ë·Î ½ÇÇàµÈ´Ù. ±×·¯¹Ç·Î ¿©·¯ºÐÀº ¹Ýµå½Ã ¸í·ÉµéÀÌ make°¡ ±×°ÍÀ» ã´Â µð·ºÅ丮¿¡¼­ Á¾¼Ó¹°µéÀ» ãµµ·Ï, Á¶½É½º·´°Ô ÀÛ¼ºÇØ¾ß ÇÑ´Ù.

ÀÌ°ÍÀº `$^'¿Í °°Àº ÀÚµ¿ º¯¼ö¿Í ÇÔ²² ÀÌ·ç¾îÁø´Ù (see section ÀÚµ¿ º¯¼öµé(Automatic Variables)). ¿¹¸¦ µé¾î¼­ `$^'ÀÇ °ªÀº ±× ±ÔÄ¢ÀÇ ¸ðµç Á¾¼Ó¹°µéÀÇ ¸®½ºÆ®ÀÌ´Ù. ÀÌ°ÍÀº ±×µéÀÌ Ã£¾ÆÁö´Â µð·ºÅ丮ÀÇ À̸§µéÀ» Æ÷ÇÔÇÏ°í `$@'ÀÇ °ªÀº Ÿ°ÙÀÌ´Ù. ±×·¡¼­:

foo.o : foo.c
        cc -c $(CFLAGS) $^ -o $@

(º¯¼ö CFLAGS´Â ¿©·¯ºÐÀÌ C ÄÄÆÄÀÏ¿¡ ´ëÇؼ­ ¹¬½ÃÀû ±ÔÄ¢À¸·Î Ç÷¡±× °ªµéÀ» ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï Á¸ÀçÇÑ´Ù; ¿ì¸®´Â ÀÌ°ÍÀ» ÀÏ°ü¼º ¶§¹®¿¡ »ç¿ëÇß°í ±×·¡¼­ ÀÌ°ÍÀº ¸ðµç C ÄÄÆÄÀÏ¿¡ °øÅëÀ¸·Î ¿µÇâÀ» ¹ÌÄ¥ °ÍÀÌ´Ù; see section ¹¬½ÃÀû ±ÔÄ¢¿¡ ÀÇÇØ »ç¿ëµÇ´Â º¯¼ö(Variables Used by Implicit Rules).)

Á¾Á¾ Á¾¼Ó¹°µéÀº Çì´õ ÆÄÀϵéÀ» °°ÀÌ Æ÷ÇÔÇÑ´Ù. À̵éÀº ¸í·É¾È¿¡¼­ ¾ð±ÞÇÏ°í ½ÍÁö ¾ÊÀº °ÍÀÌ´Ù. ÀÚµ¿ º¯¼ö `$<'´Â ´ÜÁö ù¹ø° Á¾¼Ó¹°À» °¡¸®Å²´Ù:

VPATH = src:../headers
foo.o : foo.c defs.h hack.h
        cc -c $(CFLAGS) $< -o $@

µð·ºÅ丮 °Ë»ö°ú ¹¬½ÃÀû ±ÔÄ¢µé(Directory Search and Implicit Rules)

$code{VPATH}³ª vpath·Î ÁöÁ¤µÈ µð·ºÅ丮µé¿¡ ´ëÇÑ °Ë»öÀº ¹¬½ÃÀû ±ÔÄ¢À» »ý°¢ÇÒ ¶§¿¡µµ ¶ÇÇÑ ÀϾ´Ù (see section ¹¬½ÃÀû ±ÔÄ¢(Using Implicit Rules)).

¿¹¸¦ µé¾î¼­ ÆÄÀÏ `foo.o'°¡ ¾î¶² ¸í½ÃÀûÀÎ ±ÔÄ¢µµ °¡ÁöÁö ¾ÊÀ¸¸é, `foo.c'°¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é ÀÌ°ÍÀ» ÄÄÆÄÀÏÇÏ´Â ³»Àå ±ÔÄ¢°ú °°Àº, ¹¬½ÃÀû ±ÔÄ¢µéÀ» »ý°¢ÇÑ´Ù. ±×·± ÆÄÀÏÀÌ ÇöÀç µð·ºÅ丮¿¡ ¾øÀ¸¸é ÀûÀýÇÑ µð·ºÅ丮µéÀÌ °Ë»öµÈ´Ù. `foo.c'°¡ ¾î¶² µð·ºÅ丮µé Áß Çϳª¿¡ Á¸ÀçÇϸé (¶Ç´Â makefile¿¡ ¾ð±ÞµÇ¾ú´Ù¸é), C ÄÄÆÄÀÏÀ» À§ÇÑ ¹¬½ÃÀû ±ÔÄ¢ÀÌ Àû¿ëµÈ´Ù.

¹¬½ÃÀû ±ÔÄ¢µéÀÇ ¸í·ÉÀº ÀϹÝÀûÀ¸·Î ÇÊ¿äÇؼ­ ÀÚµ¿ º¯¼öµéÀ» »ç¿ëÇÑ´Ù; °á°úÀûÀ¸·Î ±×µéÀº ¾î¶² ¿©ºÐÀÇ ³ë·Â¾øÀ̵µ µð·ºÅ丮 °Ë»ö¿¡ ÀÇÇؼ­ ã¾ÆÁö´Â ÆÄÀÏ À̸§µéÀ» »ç¿ëÇÒ °ÍÀÌ´Ù.

¸µÅ© ¶óÀ̺귯¸® µð·ºÅ丮 °Ë»ö(Directory Search for Link Libraries)

µð·ºÅ丮 °Ë»öÀº ¸µÄ¿¿Í ÇÔ²² »ç¿ëµÇ´Â ¶óÀ̺귯¸®µé¿¡ Ưº°ÇÑ ¹æ½ÄÀ¸·Î Àû¿ëµÈ´Ù. ÀÌ Æ¯º°ÇÑ ±â´ÉÀº ¿©·¯ºÐÀÌ Á¾¼Ó¹°ÀÇ À̸§ÀÌ `-lname'°ú °°Àº ÇüŸ¦ Áö´Ïµµ·Ï ÀÛ¼ºÇÒ ¶§ µ¿ÀÛÇÑ´Ù. (¿©·¯ºÐÀº ÀÌ»óÇÑ ¾î¶² °ÍÀÌ ¿©±â¼­ ÁøÇàÁßÀÌ´Ù¶ó°í ¸»ÇÒ ¼öµµ ÀÖ´Ù. ¿Ö³Ä¸é Á¾¼Ó¹°Àº ÀϹÝÀûÀ¸·Î ÆÄÀÏÀÇ À̸§ÀÌ°í ¶óÀ̺귯¸®ÀÇ ÆÄÀÏ À̸§Àº `-lname'°¡ ¾Æ´Ï¶ó `libname.a' ó·³ º¸À̱⠶§¹®ÀÌ´Ù.)

¾î¶² Á¾¼Ó¹°ÀÇ À̸§ÀÌ `-lname'ÀÇ ÇüŸ¦ °¡Áö¸é make´Â ±×°ÍÀ» ÇöÀç µð·ºÅ丮, vpath °Ë»ö °æ·Î, VPATH °Ë»ö °æ·Î¿Í ¸ÅÄ¡µÇµµ·Ï ÁöÁ¤µÈ µð·ºÅ丮µé ¾È¿¡¼­, ±×¸®°í ³ª¼­ `/lib', `/usr/lib', ±×¸®°í `prefix/lib' (ÀϹÝÀûÀ¸·Î `/usr/local/lib', ±×·¯³ª MS-DOS/MS-Windows ¹öÀüÀÇ make´Â prefix°¡ DJGPP ¼³Ä¡ Æ®¸®ÀÇ ·çÆ®·Î Á¤ÀÇµÈ °Íó·³ ÀÛµ¿ÇÑ´Ù)¿¡¼­ `libname.a' ÆÄÀÏÀ» °Ë»öÇÔÀ¸·Î½á, Ưº°ÇÏ°Ô Ã³¸®ÇÑ´Ù.

¿¹¸¦ µé¾î¼­,

foo : foo.c -lcurses
        cc $^ -o $@

´Â `cc foo.c /usr/lib/libcurses.a -o foo'°¡, `foo'°¡ `foo.c'º¸´Ù ¶Ç´Â `/usr/lib/libcurses.a'º¸´Ù ´õ ¿À·¡µÈ °ÍÀ̶ó¸é, ½ÇÇàµÇµµ·Ï ÇÑ´Ù.

°¡Â¥ ¸ñÀû¹°(Phony Targets)

°¡Â¥ ¸ñÀû¹°Àº ½ÇÁ¦·Î ÆÄÀÏÀÇ À̸§ÀÌ ¾Æ´Ñ °ÍÀÌ´Ù. ÀÌ°ÍÀº ¿©·¯ºÐÀÌ ¸í½ÃÀûÀÎ ¿ä±¸¸¦ ÇÒ ¶§ ½ÇÇàµÇ´Â ¾î¶² ¸í·Éµé¿¡ ´ëÇÑ À̸§ÀÌ´Ù. °¡Â¥ ¸ñÀû¹°À» »ç¿ëÇÏ´Â µ¥´Â µÎ °¡Áö ÀÌÀ¯°¡ ÀÖ´Ù: µ¿ÀÏÇÑ À̸§À» °¡Áø ÆÄÀÏ°ú Ãæµ¹À» ÇÇÇϱâ À§Çؼ­°¡ ÇϳªÀÌ°í ÆÛÆ÷¸Õ½º¸¦ °³¼±Çϱâ À§ÇÑ °ÍÀÌ ÇϳªÀÌ´Ù.

±×°ÍÀÇ ¸í·ÉµéÀÌ ¸ñÀû ÆÄÀÏÀ» »ý¼ºÇÏÁö ¾ÊÀ» ±ÔÄ¢À» ¸¸µç´Ù¸é, ±× ¸í·ÉµéÀº ¸ñÀû¹°ÀÌ ´Ù½Ã¸¸µé¾î¾ß ÇÏ´Â °ÍÀ¸·Î ³ªÅ¸³¯ ¶§¸¶´Ù ½ÇÇàµÉ °ÍÀÌ´Ù. ´ÙÀ½Àº ÇϳªÀÇ ¿¹Á¦ÀÌ´Ù:

clean:
        rm *.o temp

rm ¸í·ÉÀÌ `clean'À̶ó´Â À̸§ÀÇ ÆÄÀÏÀ» »ý¼ºÇÏÁö ¾Ê±â ¶§¹®¿¡, ¾Æ¸¶µµ ±×·± ÆÄÀÏÀº ¾ÕÀ¸·Î Àý´ë Á¸ÀçÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×·¯¹Ç·Î, rm ¸í·ÉÀº ¿©·¯ºÐÀÌ `make clean'À̶ó°í ¸»ÇÒ ¶§¸¶´Ù ½ÇÇàµÉ °ÍÀÌ´Ù.

°¡Â¥ ¸ñÀû¹°Àº ÀÌ µð·ºÅ丮¿¡¼­ `clean'À̶ó´Â À̸§ÀÇ ÆÄÀÏÀ» ¹«¾ùÀΰ¡°¡ »ý¼ºÇÑ´Ù¸é ÀÛ¾÷À» ¸ØÃâ °ÍÀÌ´Ù. ±×°ÍÀº Á¾¼Ó¹°À» °®Áö ¾Ê±â ¶§¹®¿¡ `clean'À̶ó´Â ÆÄÀÏÀº ¹«Á¶°Ç °¡Àå ÃÖ±Ù °ÍÀ¸·Î »ý°¢µÉ °ÍÀÌ°í ±×°ÍÀÇ ¸í·ÉµéÀº Àý´ë ¼öÇàµÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ·± ¹®Á¦¸¦ ÇÇÇϱâ À§Çؼ­ ¿©·¯ºÐÀº ¸í½ÃÀûÀ¸·Î °¡Â¥°¡ µÉ ¸ñÀû¹°À», Ư¼öÇÑ ¸ñÀû¹° .PHONY(see section Ư¼ö ³»Àå Ÿ°Ù À̸§(Special Built-in Target Names))¸¦ ½á¼­ ´ÙÀ½°ú °°ÀÌ, ¼±¾ðÇÒ ¼ö ÀÖ´Ù:

.PHONY : clean

ÀÏ´Ü ÀÌ·¸°Ô ¼³Á¤Çϸé `make clean'Àº `clean'À̶ó´Â À̸§ÀÇ ÆÄÀÏÀÇ Á¸À縦 ½Å°æ¾²Áö ¾Ê°í¼­ ±× ¸í·ÉµéÀ» ½ÇÇàÇÒ °ÍÀÌ´Ù.

°¡Â¥ ¸ñÀû¹°µéÀº ´Ù¸¥ ÆÄÀϵé·ÎºÎÅÍ ½ÇÁ¦ ¸®¸ÞÀÌÅ©µÉ ¼ö ÀÖ´Â ½ÇÁ¦ ÆÄÀÏÀ» ÁöĪÇÏ´Â °ÍÀÌ ¾Æ´Ï¶õ °ÍÀ» ¾Ë±â ¶§¹®¿¡, makeÀº °¡Â¥ ¸ñÀûµéÀ» °Ë»öÇÏ´Â ¹¬½ÃÀûÀÎ ±ÔÄ¢À» ½ºÅµÇÑ´Ù(see section ¹¬½ÃÀû ±ÔÄ¢(Using Implicit Rules)). ºñ·Ï ½ÇÁ¦ ÆÄÀÏÀÇ Á¸Àç ¿©ºÎ¸¦ ½Å°æ¾²Áö ¾Ê´õ¶óµµ, ÀÌ°ÍÀÌ ¹Ù·Î °¡Â¥ ¸ñÀû¹°ÀÌ ÆÛÆ÷¸Õ½º¿¡ ÁÁ´Ù°í ÇÑ ÀÌÀ¯ÀÌ´Ù.

±×·¡¼­ ´ÙÀ½°ú °°ÀÌ ¿©·¯ºÐÀº ¸ÕÀú cleanÀÌ °¡Â¥ ¸ñÀû¹°ÀÌ´Ù¶ó°í ¸»ÇÏ´Â ¶óÀÎÀ» ¾²°í, ±ÔÄ¢À» ½á¾ß ÇÑ´Ù:

.PHONY: clean
clean:
        rm *.o temp

Æ÷´Ï Ÿ°ÙÀº ½ÇÁ¦ Ÿ°Ù ÆÄÀÏÀÇ Á¾¼Ó¹°ÀÌ µÇ¾î¼­´Â ¾ÈµÈ´Ù; ¸¸ÀÏ ±×·¸´Ù¸é, ±×°ÍÀÇ ¸í·ÉµéÀÌ, make°¡ ±× ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ®ÇÒ ¶§¸¶´Ù, ½ÇÇàµÉ °ÍÀÌ´Ù. Æ÷´Ï Ÿ°ÙÀÌ ½ÇÁ¦ Ÿ°ÙÀÇ Á¾¼Ó¹°ÀÌ Àý´ë·Î ¾Æ´Ñ ÇÑ, Æ÷´Ï Ÿ°Ù ¸í·ÉµéÀº Æ÷´Ï Ÿ°ÙÀÌ Æ¯¼öÇÑ goalÀÏ ¶§¸¸ ½ÇÇàµÉ °ÍÀÌ´Ù (see section goalÀ» ÁöÁ¤ÇÏ´Â ¸Å°³º¯¼ö(Arguments to Specify the Goals)).

Æ÷´Ï Ÿ°ÙµéÀº Á¾¼Ó¹°µéÀ» °¡Áú ¼ö ÀÖ´Ù. ÇÑ µð·ºÅ丮°¡ ´Ù¼öÀÇ ÇÁ·Î±×·¥µéÀ» Æ÷ÇÔÇÏ°í ÀÖÀ» ¶§, ÀÌ·± ÇÁ·Î±×·¥ ¸ðµÎ¸¦ ÇϳªÀÇ makefile `./Makefile' ¾È¼­ ±â¼úÇÏ´Â °ÍÀÌ °¡Àå ÆíÇÏ´Ù. µðÆúÆ®·Î ¸¸µé¾îÁø Ÿ°ÙÀÌ makefile¿¡¼­ ù¹ø°°¡ µÉ °ÍÀ̱⠶§¹®¿¡ ÀÌ°ÍÀÌ `all'¶ó´Â À̸§ÀÇ Æ÷´Ï Ÿ°ÙÀÌ µÇµµ·Ï ÇÏ°í ±×°ÍÀÇ Á¾¼Ó¹°·Î½á ¸ðµç °³º° ÇÁ·Î±×·¥µé·Î ¼³Á¤ÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. ¿¹¸¦ µé¾î¼­:

all : prog1 prog2 prog3
.PHONY : all

prog1 : prog1.o utils.o
        cc -o prog1 prog1.o utils.o

prog2 : prog2.o
        cc -o prog2 prog2.o

prog3 : prog3.o sort.o utils.o
        cc -o prog3 prog3.o sort.o utils.o

ÀÌÁ¦ ¿©·¯ºÐÀº `make'°¡ ¸ðµç ¼¼°³ÀÇ ÇÁ·Î±×·¥µéÀ» ´Ù½Ã ¸¸µéµµ·Ï ÇÒ ¼ö Àְųª ¸Å°³º¯¼ö·Î½á, ´Ù½Ã ¸¸µé Çϳª¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù (`make prog1 prog3'¿Í °°ÀÌ).

ÇϳªÀÇ Æ÷´Ï Ÿ°ÙÀÌ ´Ù¸¥ °ÍÀÇ Á¾¼Ó¹°À̶ó¸é ÀÌ°ÍÀº ´Ù¸¥ °ÍÀÇ ¼­ºê·çƾÀ¸·Î ÀÛµ¿µÈ´Ù. ¿¹¸¦ µé¾î¼­ ´ÙÀ½ `make cleanall' ´Â ¿ÀºêÁ§Æ® ÆÄÀϵé, Â÷ÀÌ ÆÄÀϵé, ±×¸®°í `program' ÆÄÀÏÀ» ¸ðµÎ Áö¿ï °ÍÀÌ´Ù:

.PHONY: cleanall cleanobj cleandiff

cleanall : cleanobj cleandiff
        rm program

cleanobj :
        rm *.o

cleandiff :
        rm *.diff

¸í·É°ú Á¾¼Ó¹°ÀÌ ¾ø´Â ±ÔÄ¢(Rules without Commands or Dependencies)

¾î¶² ±ÔÄ¢ÀÌ Á¾¼Ó¹°À̳ª ¸í·ÉÀÌ ¾ø°í ±× ±ÔÄ¢ÀÇ Å¸°ÙÀÌ Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀ̶ó¸é make´Â ÀÌ Å¸°ÙÀ» ±×°ÍÀÇ ±ÔÄ¢ÀÌ ½ÇÇàµÉ ¶§¸¶´Ù ¾÷µ¥ÀÌÆ®µÇ¾î¾ß ÇÒ °ÍÀ¸·Î »ý°¢ÇÑ´Ù. ±×·¡¼­ °á°úÀûÀ¸·Î ÀÌ°Í¿¡ Á¾¼ÓÀûÀÎ ¸ðµç Ÿ°ÙµéÀÇ ¸í·ÉÀº Ç×»ó ½ÇÇàµÈ´Ù.

´ÙÀ½ ¿¹Á¦´Â ÀÌ°ÍÀ» ¿¹½ÃÇÑ´Ù:

clean: FORCE
        rm $(objects)
FORCE:

¿©±â¼­ Ÿ°Ù `FORCE'´Â Ưº°ÇÑ Á¶°ÇÀ» ¸¸Á·ÇÏ°í Àֱ⠶§¹®¿¡ ÀÌ°Í¿¡ Á¾¼ÓÀûÀΠŸ°Ù `clean'ÀÌ ±×°ÍÀÇ ¸í·ÉÀ» ¹«Á¶°Ç ½ÇÇàÇÑ´Ù. `FORCE'À̶ó´Â À̸§ ÀÚü¿¡´Â Ưº°ÇÑ °ÍÀÌ ¾øÁö¸¸ ÀÌ·± ½ºÅ¸ÀÏ·Î »ç¿ëµÇ´Â À̸§À¸·Î ÀϹÝÀûÀ¸·Î »ç¿ëµÈ´Ù.

¿©·¯ºÐÀÌ º¼ ¼ö ÀÖ´Â °Íó·³ ÀÌ·± ½ÄÀ¸·Î `FORCE'¸¦ »ç¿ëÇÏ´Â °ÍÀº `.PHONY: clean'¸¦ »ç¿ëÇÏ´Â °Í°ú µ¿ÀÏÇÑ °á°ú¸¦ ³½´Ù.

`.PHONY'¸¦ »ç¿ëÇÏ´Â °ÍÀº Á» ´õ ¸í½ÃÀûÀÌ°í Á» ´õ È¿°úÀûÀÌ´Ù. ±×·¯³ª makeÀÇ ´Ù¸¥ ¹öÀüµéÀº `.PHONY'¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù; ±×·¡¼­ `FORCE'´Â ¸¹Àº makefile¿¡¼­ ³ªÅ¸³­´Ù. See section °¡Â¥ ¸ñÀû¹°(Phony Targets).

À̺¥Æ®¸¦ ±â·ÏÇϱâ À§ÇÑ ºó Ÿ°Ù ÆÄÀÏ(Empty Target Files to Record Events)

empty targetÀ̶õ Æ÷´Ï Ÿ°ÙÀÇ º¯Á¾ÀÌ´Ù; ÀÌ°ÍÀº ¿©·¯ºÐÀÌ ¶§¶§·Î ¸í½ÃÀûÀ¸·Î ¿ä±¸ÇÏ´Â ¾×¼Ç¿¡ ´ëÇÑ ¸í·ÉÀ» °®°í Àִµ¥ »ç¿ëµÈ´Ù. Æ÷´Ï Ÿ°Ù°ú´Â ´Ù¸£°Ô ÀÌ·± Ÿ°Ù ÆÄÀÏÀº ½ÇÀç Á¸ÀçÇÒ ¼ö ÀÖ´Ù; ±×·¯³ª ±× ÆÄÀÏÀÇ ³»¿ëÀº »ó°üÀÌ ¾ø´Ù. ±×¸®°í º¸Åë ÀÌ°ÍÀº ºñ¾î ÀÖ´Ù.

ºó Ÿ°ÙÀÇ ¸ñÀûÀº ÀÌ°ÍÀÇ ¸¶Áö¸·-º¯°æ ½Ã°£°ú ÇÔ²² ±× ±ÔÄ¢ÀÇ ¸í·ÉµéÀÌ ¸¶Áö¸·À¸·Î ¼öÇàµÈ ½Ã°£À» ±â·ÏÇÏ°íÀÚ ÇÏ´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº ¸í·Éµé ÁßÀÇ Çϳª°¡ Ÿ°Ù ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ®ÇÏ´Â touch ¸í·ÉÀ̱⠶§¹®¿¡ ±×·¸°Ô ÇÑ´Ù.

ºó Ÿ°Ù ÆÄÀÏÀº ¹Ýµå½Ã ¾î¶² Á¾¼Ó¹°À» °¡Á®¾ß ÇÑ´Ù. ¿©·¯ºÐÀÌ ºó Ÿ°ÙÀ» ¸¸µé¶ó°í ¿ä±¸ÇÒ ¶§ ¸í·ÉµéÀº ±× Á¾¼Ó¹° ÁßÀÇ Çϳª¶óµµ Ÿ°Ùº¸´Ù ´õ ÃÖ±ÙÀÇ °ÍÀ̾î¾ß¸¸ ½ÇÇàµÈ´Ù; ´Ù¸¥¸»·Î Çϸé Á¾¼Ó¹°ÀÌ ¿©·¯ºÐÀÌ Å¸°ÙÀ» ¸¸µç ÀÌÈÄ º¯°æµÇ¾ú¾î¾ß¸¸ ½ÇÇàµÈ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ:

print: foo.c bar.c
        lpr -p $?
        touch print

ÀÌ ±ÔÄ¢À» °¡Áö°í `make print'ÇÏ¸é ¼Ò½º ÆÄÀÏÀÌ ¸¶Áö¸·À¸·Î `make print'ÇÑ ÈÄ º¯°æµÇ¾ú´Ù¸é, lpr ¸í·ÉÀ» ½ÇÇàÇÒ °ÍÀÌ´Ù. ÀÚµ¿ º¯¼ö `$?'´Â º¯°æµÈ ÆÄÀϵ鸸 ÀμâÇÒ ¶§ »ç¿ëµÈ´Ù (see section ÀÚµ¿ º¯¼öµé(Automatic Variables)).

Ư¼ö ³»Àå Ÿ°Ù À̸§(Special Built-in Target Names)

¾î¶² À̸§µéÀº ±×µéÀÌ Å¸°ÙÀ¸·Î ³ªÅ¸³¯ ¶§ Ư¼öÇÑ Àǹ̸¦ °®´Â´Ù.

.PHONY
Ư¼ö Ÿ°Ù .PHONYÀÇ Á¾¼Ó¹°µéÀº Æ÷´Ï Ÿ°Ùµé·Î »ý°¢µÈ´Ù. ±×·± Ÿ°ÙÀ» »ý°¢ÇÒ ¶§ make´Â ±× À̸§ÀÇ ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö ¾Æ´Ï¸é ±×°ÍÀÇ ÃÖÁ¾-º¯°æ ½Ã°£ÀÌ ¹«¾ùÀÎÁö »ý°¢ÇÏÁö ¾Ê°í¼­ ±×°ÍÀÇ ¸í·ÉµéÀ» ¹«Á¶°Ç ½ÇÇàÇÒ °ÍÀÌ´Ù.
.SUFFIXES
Ư¼ö Ÿ°Ù .SUFFIXESÀÇ Á¾¼Ó¹°µéÀº È®ÀåÀÚ ±ÔÄ¢(suffix rule)À» °Ë»çÇÏ´Â µ¥ »ç¿ëµÇ´Â È®ÀåÀÚµéÀÇ ¸®½ºÆ®ÀÌ´Ù. See section ±¸´Ú´Ù¸® Á¢¹Ì»ç ±ÔÄ¢(Old-Fashioned Suffix Rules).
.DEFAULT
.DEFAULT·Î ÁöÁ¤µÈ ¸í·ÉµéÀÌ ¾î¶² ±ÔÄ¢µµ ãÀ» ¼ö ¾ø´Â ÀÓÀÇÀÇ Å¸°Ùµé¿¡ ´ëÇؼ­ »ç¿ëµÈ´Ù(¸í½ÃÀû ±ÔÄ¢À̳ª ¹¬½ÃÀû ±ÔÄ¢µé). See section ÃÖÈÄÀÇ µðÆúÆ® ±ÔÄ¢ Á¤ÀÇ(Defining Last-Resort Default Rules). .DEFAULT ¸í·ÉµéÀÌ ÁöÁ¤µÇ¸é Á¾¼Ó¹°·Î ¾÷±ÞµÈ ¸ðµç ÆÄÀϵé, ±×·¯³ª ¾î¶² ±ÔÄ¢ÀÇ Å¸°ÙÀÌ ¾Æ´Ñ ÆÄÀϵéÀº ÀÌ·± ¸í·ÉµéÀ» ½ÇÇàÇÒ °ÍÀÌ´Ù. See section ¹¬½ÃÀû ±ÔÄ¢ °Ë»ö ¾Ë°í¸®Áò(Implicit Rule Search Algorithm).
.PRECIOUS
.PRECIOUS°¡ ÀÇÁ¸Çϴ Ÿ°ÙµéÀº ´ÙÀ½°ú °°Àº Ưº°ÇÑ Ãë±ÞÀ» ¹Þ´Â´Ù: make°¡ ¸í·É ½ÇÇà Áß¿¡ Áװųª ÀÎÅÍ·´Æ®¸¦ ¹ÞÀ¸¸é, ±× Ÿ°ÙÀº »èÁ¦µÇÁö ¾Ê´Â´Ù. See section make¸¦ ÀÎÅÍ·´Æ® ¶Ç´Â Á×À̱â(Interrupting or Killing make). ¶ÇÇÑ, ±× Ÿ°ÙÀÌ Áß°£ ÆÄÀÏÀ̶ó¸é, ´õÀÌ»ó ÇÊ¿äÇÏÁö ¾ÊÀ» ¶§, ÀϹÝÀûÀÎ °æ¿ìó·³, »èÁ¦µÇÁö ¾ÊÀ» °ÍÀÌ´Ù. See section ¹¬½ÃÀû ±ÔÄ¢ÀÇ ¿¬¼â(Chains of Implicit Rules). ¿©·¯ºÐÀº ¶ÇÇÑ ¹¬½ÃÀû ±ÔÄ¢ÀÇ Å¸°Ù ÆÐÅÏ(`%.o'¿Í °°Àº)À» Ưº°ÇÑ Å¸°Ù .PRECIOUSÀÇ Á¾¼Ó ÆÄÀÏ·Î ÁöÁ¤Çؼ­ ±× ÆÄÀÏÀÇ À̸§°ú ¸ÅÄ¡Çϴ Ÿ°Ù ÆÐÅÏ ¸ÅÄ¡ÀÇ ±ÔÄ¢¤· ÀÇÇؼ­ »ý¼ºµÈ Áß°£ ÆÄÀϵéÀ» º¸Á¸ÇÒ ¼ö ÀÖ´Ù.
.INTERMEDIATE
.INTERMEDIATE°¡ ÀÇÁ¸Çϴ Ÿ°ÙµéÀº Áß°£ ÆÄÀϵé·Î Ãë±ÞµÈ´Ù. See section ¹¬½ÃÀû ±ÔÄ¢ÀÇ ¿¬¼â(Chains of Implicit Rules). Á¾¼Ó¹°ÀÌ ¾ø´Â .INTERMEDIATE´Â makefile¿¡¼­ ¾ð±ÞµÈ ¸ðµç Ÿ°ÙµéÀ» Áß°£ ÆÄÀϵé·Î ¸¶Å·ÇÑ´Ù.
.SECONDARY
.SECONDARY°¡ ÀÇÁ¸Çϴ Ÿ°ÙµéÀº Áß°£ ÆÄÀϵé·Î Ãë±ÞµÈ´Ù. ´Ü ±×µéÀº ÀÚµ¿À¸·Î »èÁ¦µÇÁö ¾Ê´Â´Ù. See section ¹¬½ÃÀû ±ÔÄ¢ÀÇ ¿¬¼â(Chains of Implicit Rules). Á¾¼Ó¹°ÀÌ ¾ø´Â .SECONDARY´Â makefile¿¡¼­ ¾ð±ÞµÈ ¸ðµç Ÿ°ÙÀ» secondary·Î ¸¶Å·ÇÑ´Ù.
.IGNORE
.IGNORE¿¡ ´ëÇؼ­ Á¾¼Ó¹°µéÀ» ÁöÁ¤Çϸé make´Â ±×·± Ư¼öÇÑ ÆÄÀϵ鿡 ´ëÇؼ­ ½ÇÇàÇÑ ¸í·ÉµéÀÇ ½ÇÇà¿¡¼­ ¹ß»ýÇÑ ¿¡·¯µéÀ» ¹«½ÃÇÑ´Ù. .IGNORE¿¡ ´ëÇÑ ¸í·ÉµéÀº Àǹ̰¡ ¾ø´Ù. Á¾¼Ó¹°ÀÌ ¾øÀÌ Å¸°ÙÀ¸·Î½á ¾ð±ÞµÇ¸é .IGNORE´Â ¸ðµç ÆÄÀϵ鿡 ´ëÇÑ ¸í·ÉµéÀÇ ½ÇÇà¿¡¼­ ¹ß»ýÇÏ´Â ¿¡·¯µéÀ» ¹«½ÃÇ϶ó°í ¸»ÇÏ´Â °ÍÀÌ´Ù. ÀÌ·± `.IGNORE'ÀÇ »ç¿ëÀº ¿ª»çÀûÀΠȣȯ¼º¸¸À» À§Çؼ­ Áö¿øµÈ´Ù. ÀÌ°ÍÀÌ makefile¿¡ ÀÖ´Â ¸ðµç ¸í·É¿¡ ¿µÇâÀ» ¹ÌÄ¡±â ¶§¹®¿¡ ÀÌ°ÍÀº ¾ÆÁÖ À¯¿ëÇÑ °ÍÀÌ ¾Æ´Ï´Ù; ¿ì¸®´Â ¿©·¯ºÐÀÌ Æ¯Á¤ÇÑ ¸í·Éµé¿¡¼­ ¿¡·¯µéÀ» ¹«½ÃÇÏ´Â ¼±ÅÃÀûÀÎ ¹æ¹ýÀ» Á» ´õ »ç¿ëÇϱ⸦ ±ÇÇÑ´Ù. See section ¸í·É¿¡¼­ ¿¡·¯(Errors in Commands).
.SILENT
.SILENT¿¡ ´ëÇÑ Á¾¼Ó¹°µéÀ» ÁöÁ¤ÇÑ´Ù¸é make´Â ÀÌ·± ƯÁ¤ ÆÄÀϵéÀ» ´Ù½Ã ¸¸µå´Â ¸í·ÉµéÀ» ½ÇÇàÇϱâ Àü¿¡ À̵éÀ» µð½ºÇ÷¹ÀÌÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. .SILENT¿¡ ´ëÇÑ ¸í·ÉµéÀº Àǹ̰¡ ¾ø´Ù. Á¾¼Ó¹°ÀÌ ¾ø´Â Ÿ°ÙÀ¸·Î½á ¾ð±ÞµÈ´Ù¸é .SILENT´Â ±×°ÍµéÀ» ½ÇÇàÇϱâ Àü¿¡ ¸ðµç ¸í·ÉµéÀ» µð½ºÇ÷¹ÀÌÇÏÁö ¾Êµµ·Ï ¸»ÇÏ´Â °ÍÀÌ´Ù. ÀÌ·± `.SILENT'ÀÇ »ç¿ë¹ýÀº ¿ª»çÀû ȣȯ¼º¸¸À» À§Çؼ­ Áö¿øµÇ´Â °ÍÀÌ´Ù. ƯÁ¤ ¸í·ÉµéÀÌ Ä§¹¬ÇÏ°Ô Çϵµ·Ï Çϱâ À§Çؼ­ Á» ´õ ¼±ÅÃÀûÀÎ ¹æ¹ýÀ» »ç¿ëÇϱ⸦ ±ÇÀåÇÑ´Ù. See section ¸í·É ¿¡ÄÚ(Command Echoing). makeÀÇ Æ¯Á¤ÇÑ ½ÇÇà¿¡ ´ëÇؼ­ ¸ðµç ¸í·ÉµéÀ» ÀáÀáÇÏ°Ô Çϱ⸦ ¿øÇÑ´Ù¸é `-s'³ª `--silent' ¿É¼ÇÀ» »ç¿ëÇ϶ó (see section ¿É¼ÇµéÀÇ ¿ä¾à(Summary of Options)).
.EXPORT_ALL_VARIABLES
Ÿ°ÙÀ¸·Î½á ¾ð±ÞµÊÀ¸·Î½á ÀÌ°ÍÀº make°¡ ¸ðµç º¯¼öµéÀ», µðÆúÆ®·Î Â÷Àϵå ÇÁ·Î¼¼½ºµé¿¡°Ô ÀͽºÆ÷Æ®Çϵµ·Ï ÇÑ´Ù. See section ¼­ºê-make¿¡ ´ëÇÑ Åë½Å º¯¼ö(Communicating Variables to a Sub-make).

Á¤ÀÇµÈ ¹¬½ÃÀû ±ÔÄ¢ Á¢½Ã»ç°¡ Ÿ°ÙÀ¸·Î½á ³ªÅ¸³­´Ù¸é À̰͵µ ¶ÇÇÑ Æ¯¼ö Ÿ°ÙÀ¸·Î ¿©°ÜÁø´Ù. ±×·¡¼­ `.c.o'¿Í °°Àº µÎ Á¢¹Ì»çµéµµ ¸¶Âù°¡ÁöÀÌ´Ù. ÀÌ·± Ÿ°ÙµéÀº Á¢¹Ì»ç ±ÔÄ¢ÀÌ´Ù. ÀÌ°ÍÀº ¹¬½ÃÀû ±ÔÄ¢µéÀ» Á¤ÀÇÇÏ´Â ±¸½Ä ¹æ¹ýÀÌ´Ù(±×·¯³ª ¾ÆÁ÷ ¿©ÀüÈ÷ ³Î¸® »ç¿ëµÇ°í ÀÖ´Â ¹æ¹ýÀÌ´Ù). ¿øÄ¢ÀûÀ¸·Î ¾î¶² Ÿ°ÙÀ̸§ÀÌ¶óµµ ¿©·¯ºÐÀÌ ÀÌ°ÍÀ» µÎ°³·Î ÂÉ°³¼­ ±× µÎ ºÎºÐÀ» Á¢¹Ì»ç ¸®½ºÆ®¿¡´Ù Ãß°¡Çϸé, ÀÌ·± ½ÄÀ¸·Î Ư¼öÇÑ °ÍÀÌ µÉ ¼ö ÀÖ´Ù. ½ÇÁ¦·Î, Á¢¹Ì»çµéÀº º¸Åë `.'·Î ½ÃÀÛÇϱ⠶§¹®¿¡ ÀÌ·± Ư¼ö Ÿ°Ù À̸§µé ¶ÇÇÑ `.'·Î ½ÃÀÛÇÑ´Ù. See section ±¸´Ú´Ù¸® Á¢¹Ì»ç ±ÔÄ¢(Old-Fashioned Suffix Rules).

ÇϳªÀÇ ±ÔÄ¢¾ÈÀÇ ´Ù¼öÀÇ Å¸°Ùµé(Multiple Targets in a Rule)

´Ù¼ö Ÿ°ÙÀ» °¡Áö´Â ±ÔÄ¢Àº ÇϳªÀÇ Å¸°ÙÀ» °¡Áö´Â(±×¸®°í ³ª¸ÓÁø¤¤ ¸ðµÎ µ¿ÀÏÇÑ) ´Ù¼öÀÇ ±ÔÄ¢µéÀ» ÀÛ¼ºÇÏ´Â °Í°ú µ¿ÀÏÇÏ´Ù. µ¿ÀÏÇÑ ¸í·ÉµéÀÌ ¸ðµç Ÿ°Ùµé¿¡ Àû¿ëµÇÁö¸¸ ±×µéÀÇ È¿°ú´Â, ¿©·¯ºÐÀÌ ¸í·É¿¡´Ù `$@'¸¦ »ç¿ëÇÏ¿© ½ÇÁ¦ Ÿ°Ù À̸§À» ´ëüÇÒ ¼ö Àֱ⠶§¹®¿¡, ´Ù¾çÇÒ ¼ö ÀÖ´Ù. ±ÔÄ¢Àº ¸ðµç Ÿ°Ùµé¿¡ ´ëÇؼ­ µ¿ÀÏÇÑ Á¾¼Ó¹°µéÀ» Àû¿ëÇÑ´Ù.

ÀÌ°ÍÀº ´ÙÀ½ µÎ°¡Áö °æ¿ì¿¡ À¯¿ëÇÏ´Ù.

¿©·¯ºÐÀÌ, º¯¼ö `$@'°¡ ¿©·¯ºÐ¿¡°Ô ¸í·ÉµéÀ» º¯ÇÏ°Ô ÇÏ´Â °Í°ú ºñ½ÁÇÏ°Ô, Ÿ°Ù¿¡ µû¶ó¼­ Á¾¼Ó¹°µéÀ» ´Ù¸£°Ô ÇÏ°íÀÚ ÇÑ´Ù°í Çغ¸ÀÚ. ¿©·¯ºÐÀº ÇϳªÀÇ ÀϹÝÀûÀÎ ±ÔÄ¢¾È¿¡´Ù ´Ù¼öÀÇ Å¸°ÙµéÀ» ½á¼­ ÀÌ·¸°Ô ÇÒ ¼ö ¾ø´Ù. ±×·¯³ª ¿©·¯ºÐÀº ÀÌ°ÍÀ» static pattern rule¸¦ »ç¿ëÇؼ­ ÇÒ ¼ö ÀÖ´Ù. See section Á¤Àû ÆÐÅÏ ±ÔÄ¢(Static Pattern Rules).

Ÿ°Ù Çϳª¿¡ ´ëÇÑ ¿©·¯ ±ÔÄ¢(Multiple Rules for One Target)

ÇϳªÀÇ ÆÄÀÏÀÌ ¿©·¯ ±ÔÄ¢µéÀÇ Å¸°ÙÀÌ µÉ ¼ö ÀÖ´Ù. ¸ðµç ±ÔÄ¢¿¡¼­ ¾ð±ÞµÈ ¸ðµç Á¾¼Ó¹°µéÀº ±× Ÿ°Ù¿¡ ´ëÇÑ Á¾¼Ó¹° ¸®½ºÆ® Çϳª·Î ÇÕÃÄÁø´Ù. Ÿ°ÙÀÌ ÇÑ ±ÔÄ¢ÀÇ ÀÓÀÇÀÇ Á¾¼Ó¹°º¸´Ù ´õ ¿À·¡µÈ °ÍÀ̶ó¸é ±× ¸í·ÉÀÌ ½ÇÇàµÈ´Ù.

ÇϳªÀÇ ÆÄÀÏ¿¡ ´ëÇؼ­ ½ÇÇàµÉ ¸í·Éµé ÁýÇÕÀº Çϳª¸¸ Á¸ÀçÇÒ ¼ö ÀÖ´Ù. ±ÔÄ¢ Çϳª ÀÌ»óÀÌ µ¿ÀÏÇÑ ÆÄÀÏ¿¡ ´ëÇÑ ¸í·ÉµéÀ» Á¦°øÇÑ´Ù¸é make´Â ¸¶Áö¸·À¸·Î ÁÖ¾îÁø ¸í·É ÁýÇÕÀ» »ç¿ëÇÏ°í ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù. (Ưº°ÇÑ °æ¿ì·Î½á ±× ÆÄÀÏÀÇ À̸§ÀÌ Á¡À¸·Î ½ÃÀÛÇÏ¸é ¿¡·¯¸Þ½ÃÁö´Â Ãâ·ÂµÇÁö ¾Ê´Â´Ù. ÀÌ·± ÀÌ»óÇÑ ÇൿÀº ´Ù¸¥ makeÀÇ ±¸Çö°ú ȣȯÀ» ÀÌ·ç±â À§Çؼ­ÀÌ´Ù.) ¿©·¯ºÐÀÇ makefileµéÀ» ÀÌ·±½ÄÀ¸·Î ÀÛ¼ºÇÏ´Â ÀÌÀ¯´Â ¾ø´Ù; ±×°ÍÀÌ ¿Ö make°¡ ¿©·¯ºÐ¿¡°Ô ¿¡·¯ ¸Þ½ÃÁö¸¦ ÁÖ´Â ÀÌÀ¯ÀÌ´Ù.

Á¾¼Ó¹°¸¸ ÀÖ´Â ¿©ºÐÀÇ ±ÔÄ¢ÀÌ µ¿½Ã¿¡ ¸¹Àº ÆÄÀϵ鿡°Ô ¿©ºÐÀÇ Á¾¼Ó¹°µé Á¦°øÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ ¸¸µé¾îÁö°í ÀÖ´Â ¸ðµç ÄÄÆÄÀÏ·¯ °á°ú ÆÄÀϵéÀÇ ¸®½ºÆ®¸¦ ´ã°í ÀÖ´Â objects¶ó´Â À̸§ÀÇ º¯¼ö¸¦ º¸Åë °¡Áø´Ù. À̵éÁß ¸ðµÎ°¡ `config.h' ÆÄÀÏÀÌ º¯°æµÇ¸é ¹Ýµå½Ã ÄÄÆÄÀϵǾî¾ß ÇÑ´Ù´Â °ÍÀ» ¸»ÇÏ´Â ½¬¿î ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÏ´Â °ÍÀÌ´Ù:

objects = foo.o bar.o
foo.o : defs.h
bar.o : defs.h test.h
$(objects) : config.h

ÀÌ°ÍÀº, ½ÇÁ¦·Î ¿ÀºêÁ§Æ® ÆÄÀϵéÀ» ¸¸µå´Â ¹æ¹ýÀ» ÁöÁ¤ÇÏ´Â ±ÔÄ¢µéÀ» º¯°æÇÏÁö ¾Ê°í¼­ »ðÀԵǰųª Á¦°ÅµÉ ¼ö ÀÖ´Ù. ¶ÇÇÑ Ãß°¡ÀÇ Á¾¼Ó¹°À» °£ÇæÀûÀ¸·Î Ãß°¡ÇÏ°íÀÚ ÇÑ´Ù¸é ÀÌ°ÍÀº »ç¿ëÇϱâ Æí¸®ÇÑ ÆûÀÌ µÉ °ÍÀÌ´Ù.

Ãß°¡µÈ Á¾¼Ó¹°µéÀº make¿¡ ´ëÇÑ ¸í·É ¸Å°³º¯¼ö·Î ¿©·¯ºÐÀÌ ¼³Á¤ÇÑ º¯¼ö·Î ÁöÁ¤µÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ ´Ù¸¥ ÁÁÀº ÁÁÀº Á¡ÀÌ´Ù. (see section º¯¼ö °ãÃľ²±â(Overriding Variables)). ¿¹¸¦ µé¾î¼­,

extradeps=
$(objects) : $(extradeps)

ÀÌ°ÍÀº ¸í·É `make extradeps=foo.h'°¡ `foo.h'¸¦ °¢ ¿ÀºêÁ§Æ® ÆÄÀÏ¿¡ ´ëÇؼ­ Á¾¼Ó¹°·Î½á »ý°¢ÇÒ °ÍÀÌÁö¸¸ ÀÌ·± ¸Å°³º¯¼ö°¡ ¾ø´Â Æò¹üÇÑ `make'´Â ±×·¸Áö ¾ÊÀ»°ÍÀ̶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù.

ÇϳªÀÇ Å¸°Ù¿¡ ´ëÇÑ ¸í½ÃµÈ ±ÔÄ¢µé ÁßÀÇ ¾î¶² °Íµµ ¸í·ÉµéÀ» °®Áö ¾Ê´Â´Ù¸é make´Â ¾î¶² ¸í·ÉµéÀ» ã±â À§Çؼ­ Àû¿ë°¡´ÉÇÑ ¹¬½ÃÀû ±ÔÄ¢À» °Ë»öÇÑ´Ù see section ¹¬½ÃÀû ±ÔÄ¢(Using Implicit Rules)).

Á¤Àû ÆÐÅÏ ±ÔÄ¢(Static Pattern Rules)

Á¤Àû ÆÐÅÏ ±ÔÄ¢(Static pattern rules)Àº ´Ù¼öÀÇ Å¸°ÙÀ» ÁöÁ¤ÇÏ°í Ÿ°ÙÀÇ À̸§¿¡ ±â¹ÝÇؼ­ °¢ Ÿ°Ù¿¡ ´ëÇÑ Á¾¼Ó¹° À̸§µéÀ» ±¸ÃàÇÏ´Â ±ÔÄ¢ÀÌ´Ù. ÀÌ°ÍÀº ´Ù¼öÀÇ ±ÔÄ¢À» °¡Áö´Â ÇϳªÀÇ ÀÏ¹Ý ±ÔÄ¢º¸´Ù Á» ´õ ÀϹÝÀûÀÌ´Ù. ¿Ö³Ä¸é Ÿ°ÙµéÀÌ µ¿ÀÏÇÑ Á¾¼Ó¹°µéÀ» °¡Áú ÇÊ¿ä°¡ ¾ø±â ¶§¹®ÀÌ´Ù. ±×µéÀÇ Á¾¼Ó¹°µéÀº ¹Ýµå½Ã ºñ½Á(analogous)ÇØ¾ß ÇÏÁö¸¸ ¹Ýµå½Ã µ¿ÀÏ(identical)ÇÒ ÇÊ¿ä´Â ¾ø´Ù.

Á¤Àû ÆÐÅÏ ±ÔÄ¢ÀÇ ¹®¹ý(Syntax of Static Pattern Rules)

´ÙÀ½Àº Á¤Àû ÆÐÅÏ ±ÔÄ¢ÀÇ ¹®¹ýÀÌ´Ù.

targets ...: target-pattern: dep-patterns ...
        commands
        ...

¿©±â¼­ targets ¸®½ºÆ®´Â ÀÌ ±ÔÄ¢ÀÌ Àû¿ëµÉ ´ë»ó Ÿ°ÙµéÀ» ÁöÁ¤ÇÑ´Ù. Ÿ°ÙµéÀº ÀÏ¹Ý ±ÔÄ¢ÀÇ Å¸°Ù°ú ¸¶Âù°¡Áö·Î ¿ÍÀϵåÄ«µå ¹®ÀÚµéÀ» °¡Áú ¼ö ÀÖ´Ù (see section ÆÄÀÏ À̸§¿¡ ¿ÍÀϵåÄ«µå »ç¿ë(Using Wildcard Characters in File Names)).

target-pattern°ú dep-patternsÀº °¢ Ÿ°Ù¿¡ ´ëÇÑ Á¾¼Ó¹°µéÀ» °è»êÇÏ´Â ¹æ¹ýÀ» ¸»ÇÏ´Â °ÍÀÌ´Ù. °¢ Ÿ°ÙÀº target-pattern¿¡ ´ëÇؼ­, ÁÙ±â(stem)À̶ó°í ºÒ¸®´Â, Ÿ°Ù À̸§ ºÎºÐÀ» ÃßÃâÇϱâ À§Çؼ­ ºñ±³µÈ´Ù. ÀÌ ÁÙ±â´Â Á¾¼Ó¹° À̸§µéÀ» ¸¸µé±â À§Çؼ­ dep-patterns °¢°¢¿¡ ´ëÀԵȴÙ. (°¢ dep-patternÀ¸·ÎºÎÅÍ Çϳª¾¿)

°¢ ÆÐÅÏÀº º¸Åë ÇϳªÀÇ `%' ¹®ÀÚ¸¦ ´ã°í ÀÖ´Ù. target-pattern°¡ Ÿ°Ù Çϳª¿Í ºñ±³µÉ ¶§, `%'´Â Ÿ°Ù À̸§ÀÇ ÀÓÀÇÀÇ ºÎºÐ°ú ¸ÅÄ¡µÉ ¼ö ÀÖ´Ù; ÀÌ·± ºÎºÐÀº ÁÙ±â(stem)¶ó°í ºÒ¸°´Ù. ÀÌ ÆÐÅÏÀÇ ³ª¸ÓÁö ºÎºÐµéÀº Á¤È®ÇÏ°Ô ¸ÅÄ¡µÇ¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾ù Ÿ°Ù `foo.o'°¡ ÆÐÅÏ `%.o'¿Í ¸ÅÄ¡µÈ´Ù. ÀÌ ¶§ `foo'°¡ ÁÙ±âÀÌ´Ù. `foo.c'¿Í `foo.out'Àº ±× ÆÐÅÏ°ú ¸ÅÄ¡µÇÁö ¾Ê´Â´Ù.

°¢ Ÿ°Ù¿¡ ´ëÇÑ Á¾¼Ó¹° À̸§µéÀº °¢ Á¾¼Ó¹° ÆÐÅÏ¿¡ ÀÖ´Â `%'¿¡ ´ëÇÑ Áٱ⸦ ´ëÄ¡ÇÔÀ¸·Î½á ¸¸µé¾îÁø´Ù. ¿¹¸¦ µé¾î¼­ ÇÑ Á¾¼Ó¹° ÆÐÅÏÀÌ `%.c'À̶ó¸é ÁÙ±â `foo'ÀÇ ´ëÄ¡´Â Á¾¼Ó¹° À̸§ `foo.c'¸¦ Á¦°øÇÑ´Ù. `%'¸¦ °®Áö ¾Ê´Â Á¾¼Ó¹° ÆÐÅÏÀ» ÀÛ¼ºÇÏ´Â °Íµµ ÇÕ¹ýÀûÀÌ´Ù; (ÀÌ·¸°Ô ¾²´Â °æ¿ì) ÀÌ Á¾¼Ó¹°Àº ¸ðµç Ÿ°Ùµé°ú µ¿ÀÏÇÏ´Ù.

ÆÐÅÏ ±ÔÄ¢¿¡ ÀÖ´Â `%' ¹®ÀÚµéÀº ¾Õ¿¡´Ù ¿ª½½·¡½¬ (`\')·Î ÀοëµÉ ¼ö ÀÖ´Ù. µý ¹æ¹ýÀ¸·Î `%'¸¦ ÀοëÇÒ ¿ª½½·¡½¬µéÀº Á» ´õ ¸¹Àº ¿ª½½·¹½¬µé·Î ÀοëµÉ ¼ö ÀÖ´Ù. `%' ¹®ÀÚµéÀ̳ª ´Ù¸¥ ¿ª½½·¡½¬µéÀ» ÀοëÇÏ´Â ¿ª½½·¡½¬µéÀº ÆÐÅÏ¿¡¼­, ÀÌ°ÍÀÌ ÆÄÀÏÀ̸§µé¿¡ ºñ±³µÇ°Å³ª ±×°ÍÀ¸·Î ÁٱⰡ ´ëÄ¡µÇ±â Àü¿¡, Á¦°ÅµÈ´Ù. `%' ¹®ÀÚµéÀ» ÀοëÇÒ À§Çè¿¡ ÀÖÁö ¾Ê´Â ¿ª½½·¡½¬µéÀº °£¼·¹ÞÁö ¾Ê´Â´Ù. ¿¡¸¦ µé¤·¼­ `the\%weird\\%pattern\\' ÆÐÅÏÀº ¾Õ¿¡ `%' ¹®ÀÚ¸¦ °¡Áø `the%weird\'¸¦ °¡Áö¸ç, `pattern\\' °¡ ±× µÚ¿¡ ¿Â´Ù. ¸¶Áö¸·¿¡ ÀÖ´Â µÎ°³ÀÇ ¿ª½½·¡½¬µéÀº ±×µéÀÌ `%' ¹®ÀÚ¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾ÊÀ¸¹Ç·Î È¥ÀÚ ³²°Ô µÈ´Ù.

´ÙÀ½Àº, `foo.o'°ú `bar.o' °¢°¢À» ´ëÀÀÇÏ´Â `.c' ÆÄÀϷκÎÅÍ ÄÄÆÄÀÏÇÏ´Â, ¿¹Á¦ÀÌ´Ù:

objects = foo.o bar.o

all: $(objects)

$(objects): %.o: %.c
        $(CC) -c $(CFLAGS) $< -o $@

¿©±â¼­ `$<'´Â Á¾¼Ó¹°ÀÇ À̸§À» °®°í ÀÌ´Â ÀÚµ¿ º¯¼öÀÌ°í `$@'´Â Ÿ°ÙÀÇ À̸§À» °®°í ÀÖ´Â À嵿 º¯¼öÀÌ´Ù; see section ÀÚµ¿ º¯¼öµé(Automatic Variables).

ÁöÁ¤µÈ °¢ Ÿ°ÙÀº Ÿ°Ù ÆÐÅÏ°ú ¹Ýµå½Ã ÀÏÄ¡ÇØ¾ß ÇÑ´Ù; ±×·¸Áö ¾ÊÀº °¢ Ÿ°Ù¿¡ ´ëÇؼ­´Â °æ°í°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù. ¿©·¯ºÐÀÌ ÆÄÀϵéÀÇ ¸®½ºÆ®¸¦ °¡Áø´Ù¸é À̵éÁß ¾î¶² °Íµé¸¸ÀÌ ±× ÆÐÅÏ°ú ÀÏÄ¡ÇÒ °ÍÀÌ°í ¿©·¯ºÐÀº filter ÇÔ¼ö¸¦ ½á¼­ ÀÏÄ¡ÇÏÁö ¾Ê´Â ÆÄÀÏ À̸§µéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù (see section ¹®ÀÚ ´ëÀÔ°ú ºÐ¼®À» À§ÇÑ ÇÔ¼öµé(Functions for String Substitution and Analysis)):

files = foo.elc bar.o lose.o

$(filter %.o,$(files)): %.o: %.c
        $(CC) -c $(CFLAGS) $< -o $@
$(filter %.elc,$(files)): %.elc: %.el
        emacs -f batch-byte-compile $<

ÀÌ ¿¹Á¦¿¡¼­ `$(filter %.o,$(files))'ÀÇ °á°ú´Â `bar.o lose.o'ÀÌ°í, ù¹ø° Á¤Àû ÆÐÅÏ ±ÔÄ¢Àº ÀÌ·± ¿ÀºêÁ§Æ® ÆÄÀÏµé °¢°¢ÀÌ ´ëÀÀÇÏ´Â C ¼Ò½º ÆÄÀÏÀ» ÄÄÆÄÀÏÇؼ­ ¾÷µ¥ÀÌÆ®µÇµµ·Ï ÇÑ´Ù. `$(filter %.elc,$(files))' ÀÇ °á°ú´Â `foo.elc'ÀÌ´Ù. ±×·¡¼­ ±× ÆÄÀÏÀº `foo.el'·ÎºÎÅÍ ¸¸µé¾îÁø´Ù.

´Ù¸¥ ¿¹Á¦´Â $*¸¦ Á¤Àû ÆÐÅÏ ±ÔÄ¢¾È¿¡¼­ »ç¿ëÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù:

bigoutput littleoutput : %output : text.g
        generate text.g -$* > $@

generate ¸í·ÉÀÌ ½ÇÇàµÉ ¶§ *´Â ÁÙ±âÀÎ `big'³ª `little'·Î È®ÀåµÉ °ÍÀÌ´Ù.

Á¤Àû ÆÐÅÏ ±ÔÄ¢ ´ë(Óß) ¹¬½ÃÀû ±ÔÄ¢(Static Pattern Rules versus Implicit Rules)

Á¤Àû ÆÐÅÏ ±ÔÄ¢Àº ÆÐÅÏ ±ÔÄ¢À¸·Î½á Á¤ÀÇµÈ ¹¬½ÃÀû ±ÔÄ¢°ú ¸¹Àº ¸é¿¡¼­ ºñ½ÁÇÏ´Ù (see section ÆÐÅÏ ±ÔÄ¢À» Á¤ÀÇÇÏ°í ÀçÁ¤Çϱâ(Defining and Redefining Pattern Rules)). µÑ´Ù Ÿ°Ù¿¡ ´ëÇÑ ÆÐÅÏÀ» °¡Áö°í Á¾¼Ó¹° À̸§µéÀ» ±¸ÃàÇÏ´Â ÆÐÅÏÀ» °¡Áø´Ù. Â÷ÀÌ´Â make°¡ ±ÔÄ¢ÀÌ Àû¿ëµÉ ¶§¸¦ °áÁ¤ÇÏ´Â ¹æ¹ýÀÌ´Ù.

¹¬½ÃÀû ±ÔÄ¢Àº ±×°ÍÀÇ ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â ¾î¶² Ÿ°Ù¿¡µµ Àû¿ëµÉ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ°ÍÀº ±× Ÿ°ÙÀÌ ÁöÁ¤µÈ ¾î¶² ¸í·Éµµ °¡ÁöÁö ¾ÊÀ» ¶§, ±×¸®°í Á¾¼Ó¹°µéÀÌ Ã£¾ÆÁú ¼ö ÀÖÀ» ¶§¿¡¸¸, Àû¿ëµÈ´Ù. ÇϳªÀÇ ¹¬½ÃÀû ±ÔÄ¢º¸´Ù ¸¹Àº °ÍÀÌ Àû¿ë°¡´ÉÀ¸·Î ³ªÅ¸³­´Ù¸é ´ÜÁö Çϳª¸¸ Àû¿ëµÈ´Ù; ÀÌ ¶§ ±× ¼±ÅÃÀº ±ÔÄ¢µéÀÇ ¼ø¼­¿¡ Á¾¼ÓÀûÀÌ´Ù.

ÀÌ¿¡ ¹ÝÇؼ­ Á¤Àû ÆÐÅÏ ±ÔÄ¢Àº ¿©·¯ºÐÀÌ ±ÔÄ¢¾È¿¡ ÁöÁ¤ÇÑ Á¤È®ÇÑ Å¸°Ùµé ¸®½ºÆ®¿¡¸¸ Àû¿ëµÈ´Ù. ÀÌ°ÍÀº ´Ù¸¥ Ÿ°Ùµé¿¡´Â Àû¿ëµÉ ¼ö ¾øÀ¸¸ç ÁöÁ¤µÈ °¢ Ÿ°Ù¿¡ ÀÏÁ¤ÇÏ°Ô Àû¿äµÈ´Ù. µÎ°³ÀÇ ¼­·Î »óÃæÇÏ´Â ±ÔÄ¢µéÀÌ Àû¿ëµÇ°í ÀÌ µÎ°³°¡ ¸í·ÉµéÀ» °¡Áø´Ù¸é ¿¡·¯ÀÌ´Ù.

Á¤Àû ÆÐÅÏ ±ÔÄ¢Àº ´ÙÀ½°ú °°Àº ÀÌÀ¯µé ¶§¹®¿¡ ¹¬½ÃÀû ±ÔÄ¢º¸´Ù ´õ ÁÁÀ» ¼ö ÀÖ´Ù:

´õºí-ÄÝ·Ð ±ÔÄ¢(Double-Colon Rules)

´õºí-ÄÝ·Ð(Double-colon) ±ÔÄ¢Àº Ÿ°Ù À̸§ µÚ¿¡ `:' ´ë½Å¿¡ `::'¸¦ »ç¿ëÇÏ¿© ÀÛ¼ºµÈ ±ÔÄ¢À» ¸»ÇÑ´Ù. À̵éÀº µ¿ÀÏÇÑ Å¸°ÙÀÌ ¿©·¯ ±ÔÄ¢¿¡¼­ ³ªÅ¸³¯ ¶§ ÀÏ¹Ý ±ÔÄ¢µé°ú´Â ´Ù¸£°Ô 󸮵ȴÙ.

ÇϳªÀÇ Å¸°ÙÀÌ ´Ù¼öÀÇ ±ÔÄ¢¿¡¼­ ³ªÅ¸³¯ ¶§ ÀÌ·± ¸ðµç ±ÔÄ¢µéÀº µ¿ÀÏÇÑ Å¸ÀÔÀ» °¡Á®¾ß¸¸ ÇÑ´Ù: Áï, ¸ðµÎ ÀÏ¹Ý ±ÔÄ¢À̰ųª ¸ðµÎ ´õºí-ÄÝ·Ð ±ÔÄ¢À̾î¾ß¸¸ ÇÑ´Ù. °¢ ´õºí-ÄÝ·Ð ±ÔÄ¢ÀÇ ¸í·ÉµéÀº Ÿ°ÙÀÌ ±× ±ÔÄ¢ÀÇ ÀÓÀÇÀÇ Á¾¼Ó¹°º¸´Ù ´õ ¿À·¡µÈ °ÍÀ̶ó¸é ½ÇÇàµÈ´Ù. ±×·¡¼­ ´õºí ÄÝ·Ð ±ÔÄ¢ÀÇ ¸ðµç °Í, ¶Ç´Â ÀÓÀÇÀÇ °ÍÀ» ½ÇÇàÇϰųª, ¶Ç´Â ¾Æ¹«°Íµµ ½ÇÇà½ÃÅ°Áö ¾ÊÀ» ¼ö ÀÖ´Ù.

µ¿ÀÏÇÑ Å¸°ÙÀÇ ´õºí-ÄÝ·Ð ±ÔÄ¢µéÀº ½ÇÁ¦·Î ¿ÏÀüÈ÷ ´Ù¸¥ °Í°ú ºÐ¸®µÈ °ÍÀÌ´Ù. °¢ ´õºí-ÄÝ·Ð ±ÔÄ¢Àº, ´Ù¸¥ Ÿ°ÙµéÀÌ Ã³¸®µÇ´Â °Íó·³, °³º°ÀûÀ¸·Î 󸮵ȴÙ.

ÇϳªÀÇ Å¸°Ù¿¡ ´ëÇÑ ´õºí-ÄÝ·Ð ±ÔÄ¢µéÀº ±×µéÀÌ makefile¿¡ ³ªÅ¸³­ ¼ø¼­´ë·Î ½ÇÇàµÈ´Ù. ±×·¯³ª ´õºí-ÄÝ·Ð ±ÔÄ¢µéÀÌ ½ÇÁ¦ Àǹ̰¡ ÀÖ´Â °æ¿ì´Â ¸í·ÉµéÀ» ½ÇÇàÇÏ´Â ¼ø¼­°¡ Àǹ̰¡ ¾ø´Â °æ¿ìÀÌ´Ù.

´õºí-ÄÝ·Ð ±ÔÄ¢µéÀº ¾î¶²¸é¿¡¼­´Â ºÒ¸í·áÇÏ°í ±×·¸°Ô ÀÚÁÖ À¯¿ëÇÑ °ÍÀÌ ¾Æ´Ï´Ù; ±×µéÀº Ÿ°ÙÀ» ¾÷µ¥ÀÌÆ®ÇÏ´Â »ç¿ëµÇ´Â ¹æ¹ýÀÌ ¾÷µ¥ÀÌÆ®¸¦ À¯¹ßÇÏ´Â µ¥ »ç¿ëµÇ´Â Á¾¼Ó¹° ÆÄÀϵ鿡 µû¶ó¼­ ´Ù¸¥ °æ¿ì¸¦ À§ÇÑ ¸ÞÄ«´ÏÁòÀ» Á¦°øÇÑ´Ù. ±×¸®°í ±×·± °æ¿ì´Â µå¹°´Ù.

°¢ ´õºí-ÄÝ·Ð ±ÔÄ¢Àº ¸í·ÉµéÀ» ¹Ýµå½Ã ÁöÁ¤ÇØ¾ß ÇÑ´Ù; ±×·¸Áö ¾ÊÀ¸¸é ¹¬½ÃÀû ±ÔÄ¢ÀÌ »ç¿ëµÉ °ÍÀÌ´Ù. See section ¹¬½ÃÀû ±ÔÄ¢(Using Implicit Rules).

Á¾¼Ó¹°µéÀ» ÀÚµ¿À¸·Î »ý¼ºÇϱâ(Generating Dependencies Automatically)

¾î¶² ÇÁ·Î±×·¥À» À§ÇÑ makefile¿¡¼­ ¿©·¯ºÐÀÌ ÀÛ¼ºÇÏ°íÀÚ ÇÏ´Â ¸¹Àº ±ÔÄ¢µéÀº Á¾Á¾ ¾î¶² ¿ÀºêÁ§Æ® ÆÄÀÏÀÌ ´Ù¸¥ Çì´õ ÆÄÀÏ¿¡ ÀÇÁ¸ÇÑ´Ù´Â °Í¸¸À» ¸»ÇÑ´Ù. ¿¹¸¦ µé¾ù `main.c'ÀÌ #include¸¦ ÅëÇؼ­ `defs.h'¸¦ »ç¿ëÇÑ´Ù¸é ¿©·¯ºÐÀº ´ÙÀ½°ú °°ÀÌ ¾µ °ÍÀÌ´Ù:

main.o: defs.h

¿©·¯ºÐÀº make°¡, `defs.h'°¡ º¯ÇÒ ¶§¸¶´Ù `main.o'¸¦ ¹Ýµå½Ã ´Ù½Ã ¸¸µé¾î¾ß ÇÑ´Ù´Â °ÍÀ» ¾Ë°Ô Çϱâ À§Çؼ­ ÀÌ ±ÔÄ¢ÀÌ ÇÊ¿äÇÏ´Ù. ¾î¶² Ä¿´Ù¶õ ÇÁ·Î±×·¥¿¡ ´ëÇؼ­´Â makefile¾È¿¡ ±×·± ±ÔÄ¢µé ¼ö½Ê°³¸¦ ÀÛ¼ºÇØ¾ß ÇÒ °ÍÀÌ´Ù. ±×¸®°í, ¿©·¯ºÐÀº Ç×»ó makefileÀ», #include¸¦ ´õÇϰųª Á¦°ÅÇÒ ¶§¸¶´Ù, Á¶½É½º·´°Ô ¤§¾÷µ¥ÀÌÆ®ÇØ¾ß ÇÑ´Ù.

ÀÌ·± °íÀüºÐÆ®¸¦ ÇÇÇϱâ À§Çؼ­ ´ëºÎºÐÀÇ Çö´ë C ÄÄÆÄÀÏ·¯µéÀº ¿©·¯ºÐÀÇ ¼Ò½º ÆÄÀÏ¿¡¼­ #includeµéÀ» ã¾Æ¼­, ¿©·¯ºÐÀ» À§Çؼ­ ÀÌ·± ±ÔÄ¢µé ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ´ë°³ ÄÄÆÄÀÏ·¯¿¡°Ô `-M' ¿É¼ÇÀ» Á־ ÀÌ·± ÀÏÀ» ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ ´ÙÀ½ ¸í·ÉÀº:

cc -M main.c

´ÙÀ½°ú °°Àº Ãâ·ÂÀ» »ý¼ºÇÑ´Ù:

main.o : main.c defs.h

±×·¡¼­ ¿©·¯ºÐÀº ´õÀÌ»ó ¸ðµç ÀÌ·± ±ÔÄ¢µéÀ» ¿©·¯ºÐ ½º½º·Î ÀÛ¼ºÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÄÄÆÄÀÏ·¯´Â ¿©·¯ºÐÀ» À§Çؼ­ ÀÌ·± °ÍÀ» ÇÒ °ÍÀÌ´Ù.

±×·± Á¾¼Ó¹°ÀÌ makefile¿¡¼­ `main.o'¸¦ ¾ð±ÞÇÏ´Â °ÍÀ» ±¸¼ºÇÑ´Ù. ±×·¡¼­ ÀÌ°ÍÀº ¹¬½ÃÀû ±ÔÄ¢ °Ë»ö¿¡ ÀÇÇؼ­ Áß°£ ÆÄÀÏ·Î Àý´ë »ý°¢µÇ¾îÁú ¼ö ¾ø´Ù. ÀÌ°ÍÀº make´Â Àý´ë ±× ÆÄÀÏÀ» »ç¿ëÇÑ ÈÄ¿¡ Áö¿ìÁö ¾Ê´Â´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.; see section ¹¬½ÃÀû ±ÔÄ¢ÀÇ ¿¬¼â(Chains of Implicit Rules).

±¸½Ä make ÇÁ·Î±×·¥µé·Î, ÀÌ·± ÄÄÆÄÀÏ·¯ ±â´ÉÀ» »ç¿ëÇؼ­ `make depend'°ú °°Àº ¸í·ÉÀ¸·Î ¿ä±¸¿¡ µû¸¥ Á¾¼Ó¹°µéÀ» »ý¼ºÇÏ´Â °ÍÀº ÀüÅëÀûÀÎ Çö½ÇÀ̾ú´Ù. ±×·± ¸í·ÁÀº ¸ðµç ÀÚµ¿À¸·Î-»ý¼ºµÈ Á¾¼Ó¹°µéÀ» ´ã°í ÀÖ´Â ÆÄÀÏ `depend'¸¦ »ý¼ºÇÒ °ÍÀÌ´Ù; ±×¸®°í ³ª¼­ makefileÀº include¸¦ »ç¿ëÇؼ­ (»ý¼ºµÈ) ±×°ÍÀ» ÀоîµéÀδ٠(see section ´Ù¸¥ makefile »ðÀÔ(Including Other Makefiles)).

GNU make¿¡¼­´Â, makefileµéÀ» ´Ù½Ã ¸¸µå´Â ±â´ÉÀÌ, ÀÌ·± Çö½ÇÀ» ±¸½ÄÀ¸·Î ¸¸µç´Ù--¿©·¯ºÐÀº make¿¡°Ô ¸í½ÃÀûÀ¸·Î Á¾¼Ó¹°µéÀ» ´Ù½Ã »ý¼ºÇϵµ·Ï ¸»ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ¿Ö³Ä¸é ÀÌ°ÍÀº Ç×»ó out of dateÀÎ ÀÓÀÇÀÇ makefileÀ» ´Ù½Ã ¸¸µé±â ¶§¹®ÀÌ´Ù. See section Makefiles°¡ ´Ù½Ã ¸¸µé¾îÁö´Â °úÁ¤(How Makefiles Are Remade).

¿ì¸®°¡ ÀÚµ¿ Á¾¼Ó¹° »ý¼º¿¡ ´ëÇؼ­ ÃßõÇÏ´Â ¹æ¹ýÀº °¢ ¼Ò½º ÆÄÀÏ¿¡ ´ëÇؼ­ ´ëÀÀÇÏ´Â ÇϳªÀÇ makefileÀ» °¡Áö´Â °ÍÀÌ´Ù. °¢ ¼Ò½º ÆÄÀÏ `name.c'¿¡ ´ëÇؼ­ ¾î¶² ÆÄÀÏÀÌ ¿ÀºêÁ§Æ® ÆÄÀÏ `name.o'ÀÎÁö ³ªÅ¸³»´Â makefile `name.d'ÀÌ Á¸ÀçÇÑ´Ù. ÀÌ ¹æ¹ý¿¡¼­ º¯°æµÈ ¼Ò½º ÆÄÀϵ鸸ÀÌ »õ·Î¿î Á¾¼Ó¹°µéÀ» »ý¼ºÇϱâ À§Çؼ­ ´Ù½Ã ½ºÄµµÉ ÇÊ¿ä°¡ ÀÖ´Ù.

´ÙÀ½Àº `name.c'¶ó°í ºÒ¸®´Â C ¼Ò½º ÆÄÀϷκÎÅÍ `name.d'¶ó°í ºÒ¸®´Â, Á¾¼Ó¹°µé·Î ÀÌ·ç¾îÁø ÆÄÀÏ Çϳª(Áï, ÇϳªÀÇ makefile)¸¦ »ý¼ºÇϱâ À§ÇÑ ÆÐÅÏ ±ÔÄ¢ÀÌ´Ù:

%.d: %.c
        $(SHELL) -ec '$(CC) -M $(CPPFLAGS) $< \
                      | sed '\''s/\($*\)\.o[ :]*/\1.o $@ : /g'\'' > $@; \
                      [ -s $@ ] || rm -f $@'

ÆÐÅÏ ±ÔÄ¢À» Á¤ÀÇÇÏ´Â µ¥ ´ëÇÑ Á¤º¸¸¦ À§Çؼ­´Â See section ÆÐÅÏ ±ÔÄ¢À» Á¤ÀÇÇÏ°í ÀçÁ¤Çϱâ(Defining and Redefining Pattern Rules). ½©¿¡ ´ëÇÑ `-e' Ç÷¡±×´Â $(CC) ¸í·ÉÀÌ ½ÇÆÐÇϸé(0¤· ¾Æ´Ñ »óÅ°ªÀ¸·Î exitÇϸé) Áï½Ã exitÇϵµ·Ï ¸¸µç´Ù. º¸Åë ½©Àº ÆÄÀÌÇÁ ¶óÀÎ(ÀÌ °æ¿ì´Â sed)¿¡¼­ ¸¶Áö¸· ¸í·ÉÀÇ »óÅ°ªÀ» °¡Áö°í exitÇÑ´Ù. ±×·¡¼­ make´Â ÄÄÆÄÀÏ·¯·ÎºÎÅÍ 0ÀÌ ¾Æ´Ñ »óÅ°ªÀ» º¸Áö ¸øÇÒ °ÍÀÌ´Ù.

GNU C ÄÄÆÄÀÏ·¯·Î ¿©·¯ºÐÀº `-M' Ç÷¡±× ´ë½Å `-MM'¸¦ »ç¿ëÇϱ⸦ ¿øÇÒ·±Áö ¸ð¸¥´Ù. ÀÌ°ÍÀº ½Ã½ºÅÛ Çì´õ ÆÄÀϵ鿡 ´ëÇؼ­´Â Á¾¼Ó¹°µéÀ» »ý·«Çϵµ·Ï ÇÑ´Ù. ÀÚ¼¼ÇÑ °ÍÀº See section `Options Controlling the Preprocessor' in Using GNU CC.

sed ¸í·ÉÀÇ ¸ñÀûÀº ´ÙÀ½°ú °°Àº °ÍÀ»:

main.o : main.c defs.h

´ÙÀ½°ú °°Àº °ÍÀ¸·Î:

main.o main.d : main.c defs.h

º¯È¯ÇÏ´Â °ÍÀÌ´Ù(¿¹¸¦ µé¾î¼­). ÀÌ°ÍÀº °¢ `.d'ÆÄÀÏÀÌ ´ëÀÀÇÏ´Â `.o' ÆÄÀÏÀÌ Á¾¼ÓÇÏ°í ÀÖ´Â ¸ðµç ¼Ò½º¿Í Çì´õ ÆÄÀϵ鿡 Á¾¼ÓÇϵµ·Ï ¸¸µç´Ù. make´Â ±×·¯¸é ¼Ò½º³ª Çì´õ ÆÄÀϵé Áß¿¡ ÀÓÀÇÀÇ °ÍÀÌ º¯Çϸé Á¾¼Ó¹°µéÀ» Àç»ý¼ºÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ¾Ë°í ÀÖ´Ù.

ÀÏ´Ü `.d' ÆÄÀϵéÀ» ´Ù½Ã ¸¸µå´Â ±ÔÄ¢À» Á¤ÀÇÇß´Ù¸é ¿©·¯ºÐÀº ±×°Íµé ¸ðµÎ¸¦ ÀÐ¾î µéÀ̱â À§Çؼ­ include Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù. See section ´Ù¸¥ makefile »ðÀÔ(Including Other Makefiles). ¿¹¸¦ µé¾î¼­:

sources = foo.c bar.c

include $(sources:.c=.d)

(ÀÌ ¿¹Á¦´Â ¼Ò½º ÆÄÀϵé `foo.c bar.c'À» Á¾¼Ó¹° makefileµé `foo.d bar.d'ÀÇ ¸®½ºÆ®·Î º¯È¯Çϱâ À§Çؼ­ ´ëÄ¡ º¯¼ö ÂüÁ¶¸¦ »ç¿ëÇÑ´Ù. ´ëÀÔ ÂüÁ¶¿¡ ´ëÇÑ ¿ÏÀüÇÑ Á¤º¸¸¦ À§Çؼ­´Â See section ´ëÀÔ ÂüÁ¶(Substitution References).) `.d'°¡ ´Ù¸¥ °Íµé°ú ºñ½ÁÇÏ°Ô makefileµéÀ̱⠶§¹®¿¡ make´Â ±×°ÍµéÀ» ¿©·¯ºÐÀ¸·ÎºÎÅÍ ¾î¶² Ãß°¡ÀÇ ÀÛ¾÷µµ ÇÊ¿ä·Î ÇÒ °Í ¾øÀÌ, ÇÊ¿äÇÏ´Ù¸é ´Ù½Ã ¸¸µç´Ù. See section Makefiles°¡ ´Ù½Ã ¸¸µé¾îÁö´Â °úÁ¤(How Makefiles Are Remade).


Go to the first, previous, next, last section, table of contents.