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


Makefile ¼Ò°³(An Introduction to Makefiles)

¿©·¯ºÐÀº makefileÀ̶ó°í ºÒ¸®´Â, make¿¡°Ô ¹«¾ùÀ» ÇÒ °ÍÀΰ¡¸¦ ¸»ÇÏ´Â, ÆÄÀÏÀÌ ÇÊ¿äÇÏ´Ù. ´ë°³ makefileÀº make¿¡°Ô ¾î¶² ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÏ°í ¸µÅ©ÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.

ÀÌ Àå¿¡¼­ ¿ì¸®´Â 8°³ÀÇ C ¼Ò½º ÆÄÀϵé°ú 3°³ÀÇ Çì´õ ÆÄÀϵé·Î ÀÌ·ç¾îÁø ÅؽºÆ® ¿¡µðÅ͸¦ ÄÄÆÄÀÏÇÏ°í ¸µÅ©ÇÏ´Â ¹æ¹ýÀ» ±â¼úÇÏ´Â, ´Ü¼øÇÑ makefile¿¡ ´ëÇؼ­ ¾ê±âÇÒ °ÍÀÌ´Ù. makefileÀº ¶ÇÇÑ make¿¡°Ô, ¸í½ÃÀûÀ¸·Î ¿ä±¸µÇ¾úÀ» ¶§ ´Ù¾çÇÑ ¸í·ÉµéÀ» ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ¸»ÇÒ ¼ö ÀÖ´Ù(¿¹¸¦ µé¾î¼­ ¾î¶² ÆÄÀϵéÀ» û¼Ò ÀÛ¾÷À¸·Î½á Á¦°ÅÇϱâ). makefileÀÇ Á» ´õ º¹ÀâÇÑ ¿¹Á¦¸¦ º¸·Á¸é section º¹ÀâÇÑ makefile ¿¹Á¦(Complex Makefile Example)À» ÂüÁ¶Çϱ⠹ٶõ´Ù.

make°¡ ¿¡µðÅ͸¦ ÀçÄÄÆÄÀÏÇÒ ¶§ °¢ º¯°æµÈ C ¼Ò½º ÆÄÀϵéÀº ¹Ýµå½Ã ÀçÄÄÆÄÀϵǾî¾ß ÇÑ´Ù. Çì´õ ÆÄÀÏÀÌ º¯°æµÇ¸é, ÇØ´ç Çì´õ ÆÄÀÏÀ» includeÇÏ´Â °¢ C ¼Ò½ºÆÄÀϵµ ¹Ýµå½Ã ÀçÄÄÆÄÀϵǾî¾ß ÇÑ´Ù. °¢ ÄÄÆÄÀÏÀº ¼Ò½º ÆÄÀÏ¿¡ ´ëÀÀÇÏ´Â ¿ÀºêÁ§Æ® ÆÄÀÏÀ» »ý¼ºÇÑ´Ù. ¸¶Áö¸·À¸·Î ¾î¶² ¼Ò½º ÆÄÀÏÀÌ ÀçÄÄÆÄÀϵǾú´Ù¸é, ¸ðµç ¿ÀºêÁ§Æ® ÆÄÀϵéÀº ±×µéÀÌ »õ·Î ¸¸µé¾îÁø °ÍÀÌµç ¾Æ´Ïµç ¹Ýµå½Ã °°ÀÌ ¸µÅ©µÇ¾î¼­ »õ·Î¿î ÆíÁý±â ½ÇÇà ÆÄÀÏÀ» ¸¸µé¾î¾ß ÇÑ´Ù.

±ÔÄ¢ÀÇ ¸ð½À(What a Rule Looks Like)

´Ü¼øÇÑ makefileÀº ´ÙÀ½°ú °°Àº ¸ð¾çÀÇ "±ÔÄ¢µé"·Î ÀÌ·ç¾îÁø´Ù:

target ... : dependencies ...
        command
        ...
        ...

targetÀº ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥¿¡ ÀÇÇؼ­ »ý¼ºµÇ´Â ÆÄÀÏÀÇ À̸§ÀÌ´Ù; ½ÇÇà ÆÄÀÏÀ̳ª ¿ÀºêÁ§Æ® ÆÄÀÏ µîÀÌ target ÆÄÀÏÀÇ ¿¹ÀÌ´Ù. targetÀº ¶ÇÇÑ, `clean' (see section °¡Â¥ ¸ñÀû¹°(Phony Targets))¿Í °°Àº, ½ÇÇàÇÒ ¾×¼ÇÀÇ À̸§ÀÌ µÉ ¼öµµ ÀÖ´Ù.

dependency´Â targetÀ» ¸¸µé±â À§ÇÑ ÀÔ·ÂÀ¸·Î »ç¿ëµÇ´Â ÆÄÀÏÀÌ´Ù. targetÀº Á¾Á¾ ¿©·¯°³ÀÇ ÆÄÀÏ¿¡ ÀÇÁ¸ÇÑ´Ù.

command´Â make°¡ ½ÇÇàÇÏ´Â ¾×¼ÇÀÌ´Ù. ±ÔÄ¢Àº Çϳª ÀÌ»óÀÇ command¸¦ °¡Áú¼öµµ ÀÖ´Â µ¥, °¢°¢Àº ÀÚ½ÅÀÇ ¶óÀÎ À§¿¡ ÀÖ´Ù. Please note: ¿©·¯ºÐÀº ¸ðµç command ¶óÀÎÀÇ Ã³À½¿¡ ÇϳªÀÇ ÅÇ ¹®ÀÚ¸¦ °¡Á®¾ß ÇÑ´Ù! ÀÌ°ÍÀº Á¶½É¼º ¾øÀ½À» Àâ´Â ¹æÇع°ÀÌ´Ù.

ÀϹÝÀûÀ¸·Î command´Â dependencies¿Í ÇÔ²² ÇÑ ±ÔÄ¢ ¾È¿¡ Á¸ÀçÇÏ°í dependenciesµé ÁßÀÇ ¾î¶² °ÍÀÌ¶óµµ º¯Çß´Ù¸é target ÆÄÀÏÀ» »ý¼ºÇÏ´Â ÀÏÀ» ÇÑ´Ù. ±×·¯³ª, targetÀ» À§ÇÑ commandµéÀ» ÁöÁ¤ÇÏ´Â ±ÔÄ¢ÀÌ ¹Ýµå½Ã dependencies¸¦ °¡Áú ÇÊ¿ä´Â ¾ø´Ù. ¿¹¸¦ µé¾î¼­ `clean'À̶ó´Â target°ú ¿¬°üµÈ »èÁ¦ command¸¦ ´ã°í ÀÖ´Â ±ÔÄ¢Àº dependencies¸¦ °¡ÁöÁö ¾Ê´Â´Ù.

±×·¸´Ù¸é ruleÀº ƯÁ¤ÇÑ ±ÔÄ¢ÀÇ targetÀÎ ¾î¶² ÆÄÀϵéÀ» ¾ðÁ¦ ¾î¶»°Ô ¸®¸ÞÀÌÅ©ÇÒ °ÍÀΰ¡¸¦ ¼³¸íÇÏ´Â °ÍÀÌ µÉ °ÍÀÌ´Ù. make´Â targetÀ» »ý¼ºÇϰųª ¾÷µ¥ÀÌÆ®Çϱâ À§Çؼ­ dependencies¿¡ command¸¦ ¼öÇàÇÑ´Ù. ±ÔÄ¢Àº ¶ÇÇÑ ¾î¶² ¾×¼ÇÀ» ¾ðÁ¦ ¾î¶»°Ô ¼öÇàÇÒ °ÍÀΰ¡¸¦ ¼³¸íÇÒ ¼ö ÀÖ´Ù.See section ±ÔÄ¢ ÀÛ¼º(Writing Rules).

makefileÀº ±ÔÄ¢µé ¿Ü¿¡ ´Ù¸¥ ÅؽºÆ®µéÀ» ´ã°í ÀÖÀ» ¼ö ÀÖÁö¸¸ ´Ü¼øÇÑ makefileÀº ´ÜÁö ±ÔÄ¢µéÀ» ´ã°í ÀÖÀ» »ÓÀÌ´Ù. ±ÔÄ¢µéÀº ÀÌ·± ÅÛÇø®Æ®¿¡¼­ º¸¿©Áö´Â °Íº¸´Ù ¾î¼¸é Á» ´õ º¹ÀâÇØ º¸ÀÏ ¼ö ÀÖÁö¸¸, ¸ðµÎ°¡ ÀÌ ÆÐÅÏ¿¡ Å« ¿ÀÂ÷¾øÀÌ ¸Â¾Æ ¶³¾îÁø´Ù.

´Ü¼øÇÑ Makefile(A Simple Makefile)

¿©±â¿¡ edit ¶ó°í ºÒ¸®´Â ½ÇÇà ÆÄÀÏ Çϳª°¡, 8°³ÀÇ C ¼Ò½º¿Í 3°³ÀÇ Çì´õ ÆÄÀϵ鿡 ÀÇÁ¸ÇÏ´Â, 8°³ÀÇ ¿ÀºêÁ§Æ® ÆÄÀϵ鿡 ÀÇÁ¸ÇÏ´Â ¸ð½ÀÀ» ¼³¸íÇÑ Á÷¼³ÀûÀÎ makefile ¿¹Á¦°¡ ÀÖ´Ù.

ÀÌ ¿¹Á¦¿¡¼­ ¸ðµç C ÆÄÀϵéÀº `defs.h'À» includeÇÏÁö¸¸ ÆíÁý ¸í·ÉµéÀ» Á¤ÀÇÇÑ °Íµé¸¸ÀÌ `command.h'¸¦ includeÇÏ°í ÆíÁý±â ¹öÆÛ¸¦ º¯°æÇÏ´Â ³·Àº ·¹º§ÀÇ ÆÄÀϵ鸸ÀÌ `buffer.h'¸¦ includeÇÑ´Ù.

edit : main.o kbd.o command.o display.o \
       insert.o search.o files.o utils.o
        cc -o edit main.o kbd.o command.o display.o \
                   insert.o search.o files.o utils.o

main.o : main.c defs.h
        cc -c main.c
kbd.o : kbd.c defs.h command.h
        cc -c kbd.c
command.o : command.c defs.h command.h
        cc -c command.c
display.o : display.c defs.h buffer.h
        cc -c display.c
insert.o : insert.c defs.h buffer.h
        cc -c insert.c
search.o : search.c defs.h buffer.h
        cc -c search.c
files.o : files.c defs.h buffer.h command.h
        cc -c files.c
utils.o : utils.c defs.h
        cc -c utils.c
clean :
        rm edit main.o kbd.o command.o display.o \
           insert.o search.o files.o utils.o

¿ì¸®´Â ±â´Ù¶õ ¶óÀÎÀ» ¹é½½·¡½Ã-°³ÇàÀ» »ç¿ëÇؼ­ µÎ ¶óÀÎÀ¸·Î ºÐÇÒÇß´Ù; ÀÌ°ÍÀº ÇϳªÀÇ ±ä ¶óÀÎÀ» ¾²´Â °Í°ú µ¿ÀÏÇÏÁö¸¸ Àб⿡ ´õ ½¬¿î °ÍÀÌ´Ù.

ÀÌ `edit'¶ó°í ºÒ¸®´Â ½ÇÇà ÆÄÀÏÀ» ¸¸µéµµ·Ï makefileÀ» ¾²±â À§Çؼ­´Â ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù:

make

ÀÌ makefileÀ» »ç¿ëÇؼ­ ½ÇÇà ÆÄÀÏ°ú ¸ðµç ¿ÀºêÁ§Æ® ÆÄÀϵéÀ» »èÁ¦ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù:

make clean

ÀÌ ¿¹Á¦ makefile¿¡¼­ targetµéÀº `edit'¶ó´Â ½ÇÇà ÆÄÀÏ°ú `main.o'¿Í `kbd.o'¶ó´Â ¿ÀºêÁ§Æ® ÆÄÀϵéÀ» Æ÷ÇÔÇÑ´Ù. dependencies´Â `main.c'¿Í `defs.h'¿Í °°Àº ÆÄÀϵéÀÌ´Ù. ½ÇÁ¦·Î °¢ `.o' ÆÄÀÏÀº targetÀ̸鼭 µ¿½Ã¿¡ dependencyÀÌ´Ù. command´Â `cc -c main.c'¿Í `cc -c kbd.c'¸¦ Æ÷ÇÔÇÑ´Ù

targetÀÌ ÆÄÀÏÀÏ ¶§, ¾î¶² dependencies µéÁß Çϳª°¡ º¯°æµÇ¾úÀ» ¶§ ÀçÄÄÆÄÀϵǰųª À縵ũµÇ¾î¾ß ÇÑ´Ù. °Ô´Ù°¡ ½º½º·Î ÀÚµ¿ÀûÀ¸·Î »ý¼ºµÈ ¾î¶² dependencies´Â ¸Ç¸ÕÀú ¾÷µ¥ÀÌÆ®µÇ¾î¾ß ÇÑ´Ù. ÀÌ ¿¹Á¦¿¡¼­ `edit'´Â 8°³ÀÇ ¿ÀºêÁ§Æ® ÆÄÀϵ鿡 ÀÇÁ¸ÇÑ´Ù; `main.o'´Â ¼Ò½º ÆÄÀÏ `main.c'¿Í Çì´õ ÆÄÀÏ `defs.h'¿¡ ÀÇÁ¸ÇÑ´Ù.

target°ú dependenciesÀ» ´ã°í ÀÖ´Â °¢ ¶óÀÎ µÚ¿¡ ½© ¸í·ÉÀÌ µû¸¥´Ù. ÀÌ·± ½© ¸í·ÉµéÀº target ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® ÇÏ´Â ¹æ¹ýÀ» ¸»ÇÏ´Â °ÍÀÌ´Ù. ÅÇ ¹®ÀÚ Çϳª°¡ °¢ ¸í·É ¶óÀÎÀÇ ¸Ç ¾Õ¿¡, makefileÀÇ ´Ù¸¥ ¶óÀεé°ú ¸í·É ¶óÀÎµé °£ÀÇ ±¸ºÐÀÌ µÇµµ·Ï, ¹Ýµå½Ã ¿Í¾ß ÇÑ´Ù. (make´Â command°¡ ¾î¶»°Ô ÀÛ¿ËÇÏ´ÂÁö¿¡ ´ëÇؼ­ ¾Æ¹«°Íµµ ¸ð¸¥´Ù´Â °ÍÀ» ±â¾ïÇϱ⠹ٶõ´Ù. target ÆÄÀÏÀ» ÀûÀýÇÏ°Ô ¾÷µ¥ÀÌÆ®ÇÒ ¸í·ÉµéÀ» Á¦°øÇÏ´Â °ÍÀº ¿©·¯ºÐµé¿¡°Ô ´Þ·Á ÀÖ´Ù. target ÆÄÀÏÀÌ ¾÷µ¥ÀÌÆ®µÇ¾î¾ß ÇÒ ¶§ ¿©·¯ºÐÀÌ ÁöÁ¤ÇÑ ±ÔÄ¢µé¿¡ ÀÖ´Â commandµéÀ» ½ÇÇàÇÏ´Â °ÍÀÌ `make'°¡ ÇÏ´Â ¸ðµç °ÍÀÌ´Ù.)

`clean'À̶ó´Â targetÀº ÆÄÀÏÀÌ ¾Æ´Ï°í ´ÜÁö ¾×¼ÇÀÇ À̸§ÀÌ´Ù. ÀÌ ±ÔÄ¢¾È¿¡ ÀÖ´Â ¾×¼ÇÀÌ ÀϹÝÀûÀÎ °æ¿ì¿¡ ½ÇÇàµÇ´Â °ÍÀ» ¹Ù¶óÁö ¾ÊÀ» °ÍÀ̱⠶§¹®¿¡ ÀÌ ±ÔÄ¢Àº ÀڽŠ½º½º·Î°¡ dependency°¡ ¾Æ´Ò»Ó´õ·¯ ¾î¶² dependenciesµµ °¡ÁöÁö ¾Ê´Â´Ù. ±×·¡¼­ ÀÌ ±ÔÄ¢ÀÇ ´Ü ÇϳªÀÇ ¸ñÀûÀº ƯÁ¤ ¸í·ÉµéÀ» ½ÇÇàÇÏ´Â °ÍÀÌ´Ù. ÆÄÀÏÀÌ ¾Æ´Ñ ´ÜÁö ¾×¼ÇÀ» ÁöĪÇÏ´Â targetÀº phony targetsÀ̶ó°í ºÒ¸°´Ù. ÀÌ·± Á¾·ùÀÇ target¿¡ ´ëÇÑ Á¤º¸¸¦ º¸·Á¸é See section °¡Â¥ ¸ñÀû¹°(Phony Targets)À» ÂüÁ¶Çϱ⠹ٶõ´Ù. make°¡ rmÀ̳ª ´Ù¸¥ ¸í·ÉÀ¸·ÎºÎÅÍ ¿¡·¯¸¦ ¹«½ÃÇϵµ·Ï ÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ­´Â See section ¸í·É¿¡¼­ ¿¡·¯(Errors in Commands), ¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.

make°¡ Makefile¸¦ ó¸®ÇÏ´Â ¹æ¹ý(How make Processes a Makefile)

µðÆúÆ®·Î make´Â ù¹ø° target(±×°ÍÀÇ À̸§ÀÌ `.'À¸·Î ½ÃÀÛÇÏÁö ¾Ê´Â target)À¸·Î ½ÃÀÛÇÑ´Ù. ÀÌ°ÍÀº default goalÀ̶ó°í ºÒ¸®´Â °ÍÀÌ´Ù.(Goals´Â make±Ã±ØÀûÀ¸·Î ¾÷µ¥ÀÌÆ®ÇÏ·Á°í ÇÏ´Â targetÀÌ´Ù See section goalÀ» ÁöÁ¤ÇÏ´Â ¸Å°³º¯¼ö(Arguments to Specify the Goals).)

ÀÌÀü ¼½¼Ç¿¡ ÀÖ´Â ´Ü¼ø ¿¹Á¦¿¡¼­ default goalÀº ½ÇÇà ÇÁ·Î±×·¥ `edit'¸¦ ¾÷µ¥ÀÌÆ®ÇÏ´Â °ÍÀÌ´Ù;±×·¡¼­ ¿ì¸®´Â ±× ±ÔÄ¢À» ¸Ç óÀ½¿¡ ³õ¾Ò´ø °ÍÀÌ´Ù.

±×·¡¼­ ´ÙÀ½°ú °°ÀÌ ¸í·ÉÀ» ÁÖ¸é make´Â ÇöÀç µð·ºÅ丮¿¡¼­ makefileÀ» Àаí ù¹ø° ±ÔÄ¢À» ó¸®Çϱ⠽ÃÀÛÇÑ´Ù:

make

¿¹Á¦¿¡¼­ ÀÌ ±ÔÄ¢Àº `edit'¸¦ ¸®¸µÅ·ÇÏ´Â °ÍÀÌ´Ù; ±×·¯³ª make°¡ ÀÌ ±ÔÄ¢À» ¿ÏÀüÈ÷ ó¸®ÇÒ ¼ö ÀÖ±â Àü¿¡, `edit'°¡ ÀÇÁ¸ÇÏ°í ÀÖ´Â ÆÄÀϵ鿡 ´ëÇÑ ±ÔÄ¢µéÀ» ¹Ýµå½Ã ó¸®ÇØ¾ß ÇÑ´Ù. ÀÌ°ÍÀº ÀÌ°æ¿ì ¿ÀºêÁ§Æ® ÆÄÀϵéÀÌ´Ù. ÀÌ·± ÆÄÀÏµé °¢°¡Àº ±× ÀÚ½ÅÀÇ ±ÔÄ¢¿¡ µû¶ó¼­ 󸮵ȴÙ. ÀÌ·± ±ÔÄ¢µéÀº °¢ `.o'ÆÄÀÏÀ» ±×ÀÇ ¼Ò½º ÆÄÀÏÀ» ÄÄÆÄÀÏÇؼ­ ¾÷µ¥ÀÌÆ®Ç϶ó°í ¸»ÇÑ´Ù. ¼Ò½º ÆÄÀÏÀÌ ¶Ç´Â dependencies¿¡ ÀÖ´Â Çì´õÆÄÀϵé Áß ¾î¶² °ÍÀÌ¶óµµ ¿ÀºêÁ§Æ® ÆÄÀϺ¸´Ù ´õ ÃÖ±ÙÀÇ °ÍÀ̶ó¸é ¶Ç´Â ¿ÀºêÁ§Æ® ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é ÀçÄÄÆÄÀÏÀÌ ¹Ýµå½Ã ÀϾ¾ß ÇÑ´Ù.

´Ù¸¥ ±ÔÄ¢µéÀº, ±×µéÀÇ targetµéÀÌ goalÀÇ dependencies·Î ³ªÅ¸³ª±â ¶§¹®¿¡, 󸮵ȴÙ. ¾î¶² ´Ù¸¥ ±ÔÄ¢ÀÌ goalÀÌ ÀÇÁ¸ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó¸é(¶Ç´Â ±×°ÍÀÌ ÀÇÁ¸ÇÏ´Â ¾î¶² °Íµµ ¾ø´Ù¸é), make¿¡°Ô ±×·¸°Ô Ç϶ó°í ¸»ÇÏÁö(make clean°ú °°Àº ¸í·ÉÀ¸·Î) ¾Ê´Â ÇÑ, ±× ±ÔÄ¢Àº 󸮵ÇÁö ¾Ê´Â´Ù.

¿ÀºêÁ§Æ® ÆÄÀÏÀ» ÀçÄÄÆÄÀÏÇϱâ Àü¿¡, make´Â ±×°ÍÀÇ dependencies, ¼Ò½º ÆÄÀÏ°ú Çì´õ ÆÄÀϵéÀ» ¾÷µ¥ÀÌÆ®ÇÏ´Â °ÍÀ» °í¹ÎÇÑ´Ù. ÀÌ makefileÀº ±×°ÍµéÀ» À§Çؼ­ ÇàÇØÁø ¾î¶² °Íµµ ÁöÁ¤ÇÏÁö ¾ÊÀº °ÍÀÌ´Ù-- `.c'¿Í `.h'ÆÄÀϵéÀº ¾î¶² ±ÔÄ¢µéÀÇ targetµµ ¾Æ´Ï´Ù--±×·¡¼­ make´Â ÀÌ·± ÆÄÀϵ鿡 ´ëÇؼ­ ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª make´Â BisonÀ̳ª Yacc¿¡ ÀÇÇؼ­ ¸¸µé¾îÁø °Íµé°ú °°Àº,C ÇÁ·Î±×·¥µéÀ», ÀÌ ¼ø°£ ±×µéÀÇ ±ÔÄ¢¿¡ ÀÇÇؼ­ ÀÚµ¿À¸·Î »ý¼ºÇÑ´Ù.

¿ÀºêÁ§Æ® ÆÄÀϵéÀÌ ÇÊ¿ä·Î ÇÏ´Â °ÍÀÌ¸é ¹«¾ùÀ̵ç ÀçÄÄÆÄÀÏÇÑ ÈÄ, make´Â `edit'¸¦ ¸®¸µÅ©ÇÒ °ÍÀΰ¡¸¦ °áÁ¤ÇÑ´Ù. ÀÌ°ÍÀº, `edit'ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê°Å³ª ¿ÀºêÁ§Æ® ÆÄÀϵé Áß ¾î¶² °ÍÀÌ¶óµµ ±×°Íº¸´Ù ´õ ÃÖ±ÙÀÇ °ÍÀ̶ó¸é, ¹Ýµå½Ã ¼öÇàµÇ¾î¾ß ÇÑ´Ù. ¾î¶² ¿ÀºêÁ§Æ® ÆÄÀÏÀÌ ´ÜÁö ÀçÄÄÆÄÀϵǾú´Ù¸é ±×°ÍÀº ÀÌÁ¦ `edit'º¸´Ù ´õ »õ·Î¿î °ÍÀÌ°í ±×·¡¼­ `edit'´Â À縵ũµÈ´Ù.

±×·¡¼­, ¿ì¸®°¡ `insert.c' ¸¦ º¯°æÇÏ°í make¸¦ ½ÇÇàÇϸé, make´Â `insert.o'¸¦ °»½ÅÇϱâ À§Çؼ­ ±× ÆÄÀÏÀ» ÄÄÆÄÀÏÇÒ °ÍÀÌ°í `edit'¸¦ ¸µÅ©ÇÒ °ÍÀÌ´Ù. ¿ì¸®°¡ `command.h' ¸¦ º¯°æÇÏ°í make¸¦ ½ÇÇàÇϸé make´Â `kbd.o', `command.o' ±×¸®°í `files.o'µéÀ» ÀçÄÄÆÄÀÏÇÒ °ÍÀÌ°í ±×¸®°í ³ª¼­ `edit'¸¦ ¸µÅ©ÇÒ °ÍÀÌ´Ù.

MakefileÀ» Á» ´õ ½±°Ô ¸¸µå´Â º¯¼öµé(Variables Make Makefiles Simpler)

¿ì¸®ÀÇ ¿¹Á¦¿¡¼­ `edit'¸¦ À§ÇÑ ±ÔÄ¢¿¡¼­ ¿ì¸®´Â ¸ðµç ¿ÀºêÁ§Æ® ÆÄÀϵéÀ» µÎ¹ø¾¿ ±â¼úÇß´Ù (¿©±â¿¡ ¹Ýº¹µÇ¾î ÀÖ´Ù):

edit : main.o kbd.o command.o display.o \
              insert.o search.o files.o utils.o
        cc -o edit main.o kbd.o command.o display.o \
                   insert.o search.o files.o utils.o

ÀÌ·¸°Ô ¹Ýº¹ÇÏ´Â °ÍÀº ¿¡·¯¸¦ ¹ß»ý½Ãų ¼ö ÀÖ´Â ¿©Áö°¡ ÀÖ´Ù; »õ·Î¿î ¿ÀºêÁ§Æ® ÆÄÀÏÀÌ ½Ã½ºÅÛ¿¡ Ãß°¡µÇ¸é ¿ì¸®´Â ±×°ÍÀ» ÇÑ ¸®½ºÆ®¿¡´Â Ãß°¡ÇÏÁö¸¸ ´Ù¸¥ °Í¿¡´Â ÀØ¾î ¹ö¸®°í Ãß°¡ÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ¿ì¸®´Â ¾î¶² º¯¼ö¸¦ »ç¿ëÇÏ¿© ÀÌ·± ¸®½ºÅ©¸¦ ¾ø¾Ö°í makefileÀ» ´Ü¼øÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù. Variables´Â Çѹø Á¤ÀÇµÇ°í ³ªÁß¿¡ ¿©·¯°÷¿¡¼­ ´ëÀԵǴ ÅؽºÆ® ¹®ÀÚ¿­À» Çã¶ôÇÑ´Ù(see section º¯¼ö »ç¿ë ¹æ¹ý(How to Use Variables)).

¸ðµç makefileÀÌ, ¸ðµç ¿ÀºêÁ§Æ® ÆÄÀÏ À̸§µéÀÇ ¸®½ºÆ®¿¡ ´ëÇؼ­ objects, OBJECTS, objs, OBJS, obj, ¶Ç´Â OBJ ¶ó´Â À̸§ÀÇ º¯¼ö¸¦ ¾²´Â °ÍÀº Ç¥ÁØ °ü·Ê(standard practice)ÀÌ´Ù. ¿ì¸®´Â ´ÙÀ½°ú °°Àº makefile¿¡¼­ ó·³ ±×·± º¯¼ö objects¸¦ ÇϳªÀÇ ¶óÀÎÀ¸·Î Á¤ÀÇÇÒ °ÍÀÌ´Ù:

objects = main.o kbd.o command.o display.o \
          insert.o search.o files.o utils.o

±×¸®°í ³ª¼­ ¿ì¸®°¡ ¿ÀºêÁ§Æ® ÆÄÀÏ À̸§µéÀÇ ¸®½ºÆ®¸¦ ³õ°íÀÚ ÇÏ´Â °÷¸¶´Ù ±× º¯¼öÀÇ °ªÀ», `$(objects)'¶ó°í ½á¼­ ´ëÀÔÇÒ ¼ö ÀÖ´Ù(see section º¯¼ö »ç¿ë ¹æ¹ý(How to Use Variables)).

¿ÀºêÁ§Æ® ÆÄÀϵ鿡 ´ëÇÑ º¯¼ö¸¦ »ç¿ëÇÒ ¶§ ´Ü¼øÇÑ makefileÀÌ ¾î¶»°Ô º¸ÀÌ´ÂÁö¿¡ ´ëÇÑ ¿¹½Ã°¡ ÀÖ´Ù:

objects = main.o kbd.o command.o display.o \
          insert.o search.o files.o utils.o

edit : $(objects)
        cc -o edit $(objects)
main.o : main.c defs.h
        cc -c main.c
kbd.o : kbd.c defs.h command.h
        cc -c kbd.c
command.o : command.c defs.h command.h
        cc -c command.c
display.o : display.c defs.h buffer.h
        cc -c display.c
insert.o : insert.c defs.h buffer.h
        cc -c insert.c
search.o : search.c defs.h buffer.h
        cc -c search.c
files.o : files.c defs.h buffer.h command.h
        cc -c files.c
utils.o : utils.c defs.h
        cc -c utils.c
clean :
        rm edit $(objects)

`make'°¡ ¸í·ÉÀ» Ãß·ÐÇϵµ·Ï Çϱâ(Letting make Deduce the Commands)

°³º° C ¼Ò½º ÆÄÀϵéÀ» ÄÄÆÄÀÏÇϱâ À§ÇÑ ¸í·ÉµéÀ» ÀüºÎ ³ª¿­ÇÏ´Â °ÍÀº ºÒÇÊ¿äÇÏ´Ù. ¿Ö³Ä¸é make´Â ±×°ÍÀ» ÃßÃøÇس¾ ¼ö Àֱ⠶§¹®ÀÌ´Ù:±×°ÍÀº `cc -c'¸í·ÉÀ» »ç¿ëÇؼ­ ´ëÀÀµÇ´Â `.c'ÆÄÀϷκÎÅÍ `.o'ÆÄÀÏÀ» °»½ÅÇϱâ À§ÇÑ implicit ruleÀ» °¡Áö°í ÀÖ´Ù. ¿¹¸¦ µé¾î¼­, `main.c'¸¦ `main.o'·Î ÄÄÆÄÀÏÇϱâ À§Çؼ­ `cc -c main.c -o main.o'¶ó´Â ¸í·ÉÀ» »ç¿ëÇÒ °ÍÀÌ´Ù. ±×·¯¹Ç·Î ¿ì¸®´Â ±× ¿ÀºêÁ§Æ® ÆÄÀϵ鿡 ´ëÇÑ ±ÔÄ¢µé·ÎºÎÅÍ ±× ¸í·ÉµéÀ» »ý·«ÇÒ ¼ö ÀÖ´Ù. See section ¹¬½ÃÀû ±ÔÄ¢(Using Implicit Rules).

`.c'ÆÄÀÏÀÌ ÀÌ·± ½ÄÀ¸·Î ÀÚµ¿À¸·Î »ç¿ëµÉ ¶§, ±×°ÍÀº ¶ÇÇÑ dependencies ¸®½ºÆ®¿¡ ÀÚµ¿À¸·Î Ãß°¡µÈ´Ù. ±×·¯¹Ç·Î ¿ì¸®´Â, ¿ì¸®°¡ ±× ¸í·ÉµéÀ» »ý·«Çß´Ù¸é, dependencies·ÎºÎÅÍ `.c'ÆÄÀϵéÀ» »ý·«ÇÒ ¼ö ÀÖ´Ù

ÀÌ·± º¯È­µé°ú À§¿¡¼­ Á¦½ÃµÈ °Í°ú °°Àº º¯¼ö objects ¸¦ ¸ðµÎ ¿¹½ÃÇÑ ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ:

objects = main.o kbd.o command.o display.o \
          insert.o search.o files.o utils.o

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

main.o : defs.h
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h

.PHONY : clean
clean :
        -rm edit $(objects)

ÀÌ°ÍÀº ¿ì¸®°¡ ½ÇÁ¦ »óȲ¿¡¼­ makefileÀ» ÀÛ¼ºÇÏ´Â ¹æ¹ýÀÌ´Ù. (`clean'°ú ¿¬°üµÈ º¹ÀâÇÔÀº ´Ù¸¥ °÷¿¡ ±â¼úµÇ¾ú´Ù. section °¡Â¥ ¸ñÀû¹°(Phony Targets), and section ¸í·É¿¡¼­ ¿¡·¯(Errors in Commands), ÂüÁ¶.)

¹¬½ÃÀû ±ÔÄ¢Àº ¾ÆÁÖ Æí¸®Çϱ⠶§¹®¿¡ Áß¿äÇÏ´Ù. ¿©·¯ºÐÀº ÀÚÁÖ »ç¿ëµÇ´Â ±×°ÍµéÀ» º¼ °ÍÀÌ´Ù.

MakefileÀÇ ´Ù¸¥ ½ºÅ¸ÀÏ(Another Style of Makefile)

makefileÀÇ ¿ÀºêÁ§Æ®µéÀÌ ´ÜÁö ¹¬½ÃÀû ±ÔÄ¢¿¡ ÀÇÇؼ­¸¸ »ý¼ºµÈ´Ù¸é makefileÀÇ ´Ù¸¥ ´ëü ½ºÅ¸ÀÏÀÌ °¡´ÉÇØÁø´Ù. ÀÌ·± makefile ½ºÅ¸ÀÏ¿¡¼­ ¿©·¯ºÐÀº ±×µéÀÇ targetµé¿¡ ÀÇÇؼ­°¡ ¾Æ´Ï¶ó ±×µéÀÇ dependencies¿¡ ÀÇÇؼ­ ¿£Æ®¸®µéÀ» ±×·ì Áþ´Â´Ù. ¿©±â¿¡ ºñ½ÁÇÏ°Ô º¸ÀÌ´Â ¿¹Á¦°¡ ÀÖ´Ù:

objects = main.o kbd.o command.o display.o \
          insert.o search.o files.o utils.o

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

$(objects) : defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h

¿©±â¼­ `defs.h'´Â ¸ðµç ¿ÀºêÁ§Æ® ÆÄÀϵéÀÇ dependency·Î ÁÖ¾îÁ³´Ù; `command.h'¿Í `buffer.h'´Â ±×°ÍµéÀ» À§Çؼ­ ¸®½ºÆ®µÈ ƯÁ¤ ¿ÀºêÁ§Æ® ÆÄÀϵéÀÇ dependenciesÀÌ´Ù.

ÀÌ°ÍÀÌ ´õ ³ªÀº°¡ ¾Æ´Ñ°¡´Â ÃëÇâÀÇ ¹®Á¦ÀÌ´Ù: ÀÌ°ÍÀÌ Á» ´õ ÄÄÆÑÆ®ÇÏÁö¸¸ ¾î¶² »ç¶÷µéÀº ÀÌ°ÍÀ», ±×µéÀÌ ÇÑÀÚ¸®¿¡ °¢ target¿¡ ´ëÇÑ Á¤º¸ ¸ðµÎ¸¦ ³Ö´Â °ÍÀÌ Á» ´õ ºÐ¸íÇÏ´Ù°í »ý°¢Çϱ⠶§¹®¿¡, ½È¾î ÇÑ´Ù.

µð·ºÅ丮¸¦ û¼ÒÇÏ´Â ±ÔÄ¢(Rules for Cleaning the Directory)

¾î¶² ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÏ´Â °ÍÀÌ ¿©·¯ºÐÀÌ ±ÔÄ¢À» ¾²°íÀÚ ÇÏ´Â À¯ÀÏÇÑ ¸ñÀûÀº ¾Æ´Ï´Ù. makefileµéÀº ÇÁ·Î±×·¥ Çϳª¸¦ ÄÄÆÄÀÏÇÏ´Â °Í ¿Ü¿¡ ¸î °¡Áö ´Ù¸¥ ÀϵéÀ» ÇÏ´Â ¹æ¹ýÀ» º¸Åë ¾ê±âÇÑ´Ù: ¿¹¸¦ µé¾î¼­ µð·ºÅ丮°¡ `clean'µÇµµ·Ï ¸ðµç ¿ÀºêÁ§Æ® ÆÄÀϵé°ú ½ÇÇà ÆÄÀϵéÀ» Áö¿ì´Â ¹æ¹ý.

¿©±â¿¡ ¿ì¸®ÀÇ ¿¹Á¦ editor¸¦ û¼ÒÇÏ´Â make±ÔÄ¢À» ¾î¶»°Ô ¾µ ¼ö Àִ°¡¿¡ ´ëÇÑ ¿¹Á¦°¡ ÀÖ´Ù:

clean:
        rm edit $(objects)

½ÇÁ¦·Î ¿ì¸®´Â ¿¹°ßÇÏÁö ¸øÇÑ »óȲµéÀ» ó¸®Çϱâ À§Çؼ­ ¾î¼¸é Á» ´õ º¹ÀâÇÑ ¹æ¹ýÀ¸·Î ±ÔÄ¢À» ¾²·Á°í ÇÒ·ÃÁöµµ ¸ð¸¥´Ù. ¿ì¸®´Â ÀÌ°ÍÀ» ÇÒ °ÍÀÌ´Ù:

.PHONY : clean
clean :
        -rm edit $(objects)

ÀÌ°ÍÀº make°¡ `clean'À̶ó°í ºÒ¸®´Â ½ÇÁ¦ ÆÄÀÏ¿¡ ÀÇÇؼ­ È¥µ¿µÇ¾îÁö´Â °ÍÀ» ¸·°í rmÀ¸·ÎºÎÅÍÀÇ ¿¡·¯µé¿¡µµ ºÒ±¸ÇÏ°í ±×°ÍÀÌ °è¼ÓµÇµµ·Ï ÇÑ´Ù. (section °¡Â¥ ¸ñÀû¹°(Phony Targets), section ¸í·É¿¡¼­ ¿¡·¯(Errors in Commands), ÂüÁ¶)

ÀÌ°Í°ú °°Àº ±ÔÄ¢Àº makefileÀÇ ¸ÇóÀ½¿¡ À§Ä¡ÇÏ¸é ¾ÈµÈ´Ù. ¿Ö³Ä¸é ¿ì¸®´Â ±×°ÍÀÌ µðÆúÆ®·Î ½ÇÇàµÇ±â¸¦ ¿øÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù! ±×·¡¼­, makefile ¿¹Á¦¿¡¼­ ¿ì¸®´Â, ±× ¿¡µðÅ͸¦ ÀçÄÄÆÄÀÏÇÏ´Â, edit¿¡ ´ëÇÑ ±ÔÄ¢ÀÌ default goal·Î ³²¾ÆÀֱ⸦ ¿øÇÑ´Ù.

cleanÀÌ editÀÇ dependency°¡ ¾Æ´Ï±â ¶§¹®¿¡, ÀÌ ±ÔÄ¢Àº ¿ì¸®°¡ `make'¸í·É¿¡°Ô ¸Å°³º¯¼ö¸¦ ÁÖÁö ¾Ê´Â´Ù¸é, ÀüÇô ½ÇÇàµÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ ±ÔÄ¢ÀÌ ½ÇÇàµÇµµ·Ï Çϱâ À§Çؼ­´Â `make clean'À̶ó°í ÀÔ·ÂÇØ¾ß ÇÑ´Ù. See section make ½ÇÇà ¹æ¹ý(How to Run make).


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