¾Õ¿¡¼ ¸ÅÅ©·Î¿¡ ´ëÇؼ ´ëÃæ ¾ð±ÞÀ» Çß´Ù. ÇÁ·Î±×·¥À» Â¥º» »ç¶÷À̳ª
·ÎÅͽº, ÇѱÛ, ¿¢¼¿ µîÀÇ ¸ðµç ÆÐÅ°Áö¿¡¼ ¸ÅÅ©·Î¶ó´Â °ÍÀ» »ç¿ëÇÏ°Ô µÈ´Ù.
Àº¿¬Áß¿¡ ¸ÅÅ©·ÎÀÇ Á¤ÀÇ´Â ´ëÃæ ÁüÀÛÇÏ°í ÀÖÀ» °ÍÀÌ´Ù. ÀÌ¹Ì ¾Ë°í Àִ¹ٿÍ
°°ÀÌ ¸ÅÅ©·Î´Â ƯÁ¤ÇÑ Äڵ带 °£´ÜÇÏ°Ô Ç¥ÇöÇÑ °Í¿¡ Áö³ªÁö ¾Ê´Â´Ù.
Makefile
¿¡¼ »ç¿ëµÇ´Â ¸ÅÅ©·Î´Â ºñ±³Àû ±× »ç¿ë¹ýÀÌ °£´ÜÇϱ⠶§¹®¿¡ ±Ý¹æ
ÀÍÇô¼ »ç¿ëÇÒ Á¤µµ°¡ µÈ´Ù.
¸ÅÅ©·ÎÀÇ Á¤ÀÇ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ º¯¼ö¸¦ ÁöÁ¤ÇÏ´Â °Íó·³ ÇÏ¸é µÈ´Ù. ±×¸®°í, ¸ÅÅ©·Î¸¦ »ç¿ëÇϱâ À§Çؼ´Â $(..)À» ÀÌ¿ëÇÏ¸é µÈ´Ù. ¾Æ·¡´Â ¸ÅÅ©·ÎÀÇ °£´ÜÇÑ ¿¹Á¦ÀÌ´Ù.
=> Âü°í: ¸ÅÅ©·ÎÀÇ »ç¿ë¿¡¼ ${..}, $(..), $..¸¦ ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ´ëºÎºÐÀÇ Ã¥¿¡¼´Â $(..) À» »ç¿ëÇ϶ó°í ±ÇÇϴ±º¿ä.
Makefile
OBJS = main.o read.o write.o
test : $(OBJS) <- (1)
gcc -o test $(OBJS)
..........
ù ¹ø° Àå¿¡¼ ´Ù·ç¾ú´ø ¿¹Á¦¿Í °ÅÀÇ ºñ½ÁÇÏ´Ù. ¸ÅÅ©·Î´Â »ç½Ç»ó º¹ÀâÇÑ °ÍÀ» °£´ÜÇÏ°Ô Ç¥½ÃÇÑ °Í¿¡ Áö³ªÁö ¾Ê´Â´Ù. (1) ¹øÀ» ¸ÅÅ©·Î¸¦ ¾È ¾²°í Ç¥ÇöÇÑ´Ù¸é ¾Æ¸¶ ¾Æ·¡¿Í °°ÀÌ µÉ °ÍÀÌ´Ù.
Makefile
test : main.o read.o write.o
gcc -o test main.o read.o write.o
=> Âü°í:
make¿¡ °üÇØ ¼³¸íÇÑ Ã¥¿¡ ´ÙÀ½°ú °°Àº ¸í¾ð(?) ÀÌ ³ª¿Â´Ù.
Macro makes Makefile happy. (¸ÅÅ©·Î´Â Makefile À» ±â»Ú°Ô ¸¸µç´Ù.)
ÀÌ ¸»Àº Makefile
À» ÀÛ¼ºÇÔ¿¡ ÀÖ¾î ¸ÅÅ©·Î¸¦ À߸¸ ÀÌ¿ëÇÏ¸é º¹ÀâÇÑ
ÀÛ¾÷µµ ¾ÆÁÖ °£´ÜÇÏ°Ô ÀÛ¼ºÇÒ ¼ö ÀÖÀ½À» ¸»ÇØ ÁÖ´Â ¸»ÀÌ ¾Æ´Ò±î »ý°¢ÇÑ´Ù.
¸ÅÅ©·Î¿¡ ´ëÇؼ´Â ´õ ÀÌ»ó ¸»ÇÒ °ÍÀÌ ¾ø´Ù. (³Ê¹« °£´ÜÇÏÁÒ ?) ÀÌÁ¦
³²Àº °ÍÀº ¿©·¯ºÐµéÀÌ ÀÚ½ÅÀÇ ¸ÅÅ©·Î¸¦ ¾î¶»°Ô ±¸¼ºÇÏ´À³ÄÀÌ´Ù. ¾î¶² °ÍÀ»
¸ÅÅ©·Î·Î Á¤ÀÇÇØ¾ß ÇÒÁö´Â ¿©·¯ºÐµéÀÇ ÀÚÀ¯À̸ç, ³ªÁß¿¡ Àü¹ÝÀûÀÎ ÁöħÀ»
¼³¸íÇÒ °ÍÀÌ´Ù.
¿©·¯ºÐµéº¸´Ù ¸Ó¸®°¡ ¾à°£ ´õ ÁÁÀº »ç¶÷µéÀÌ make ¶ó´Â °ÍÀ» ¸¸µé¸é¼ ¹Ì¸® Á¤ÇØ ³õÀº ¸ÅÅ©·ÎµéÀÌ ÀÖ´Ù. 'make -p' ¶ó°í ÀÔ·ÂÇØ º¸¸é make¿¡¼ ¹Ì¸® ¼¼ÆõǾî ÀÖ´ø ¸ðµç °ªµé(¸ÅÅ©·Î, ȯ°æ º¯¼ö(environment) µîµî)ÀÌ ¾öû ½ºÅ©·Ñ µÈ´Ù. ÀÌ °ªµéÀ» º¸°í ¹Ì¸® ÁÖ´ª µé ÇÊ¿ä´Â ¾ø´Ù. ¾îÂ÷ÇÇ ´ëºÎºÐÀÇ ³»¿ëµéÀº ¿ì¸®°¡ ÀçÁ¤ÀÇ ÇØÁÖ¾î¾ß Çϱ⠶§¹®¿¡ °á·ÐÀûÀ¸·Î ¸»ÇÏ¸é ¿ì¸®°¡ ¸ðµÎ ÀÛ¼ºÇÑ´Ù°í »ý°¢ÇÏ´Â °ÍÀÌ ¸¶À½ÀÌ ÆíÇÏ´Ù.,.
¾Æ·¡¿¡´Â ´ëºÎºÐÀÌ UNIX °è¿ÀÇ make¿¡¼ ¹Ì¸® Á¤ÇØÁ® ÀÖ´Â ¸ÅÅ©·Îµé Áß¿¡ ¸î °¡Áö¸¸ ³ª¿ÇØ º» °ÍÀÌ´Ù.
Predefined Macro
ASFLAGS = <- as ¸í·É¾îÀÇ ¿É¼Ç ¼¼ÆÃ
AS = as
CFLAGS = <- gcc ÀÇ ¿É¼Ç ¼¼ÆÃ
CC = cc (= gcc)
CPPFLAGS = <- g++ ÀÇ ¿É¼Ç
CXX = g++
LDLFAGS = <- ld ÀÇ ¿É¼Ç ¼¼ÆÃ
LD = ld
LFLAGS = <- lex ÀÇ ¿É¼Ç ¼¼ÆÃ
LEX = lex
YFLAGS = <- yacc ÀÇ ¿É¼Ç ¼¼ÆÃ
YACC = yacc
MAKE_COMMAND = make
=> Âü°í: Á÷Á¢ make -p¸¦ Çؼ Çѹø È®ÀÎÇØ º¸¼¼¿ä. °ú¿¬ make´Â ³»ºÎÀûÀ¸·Î ¾î¶² º¯¼öµéÀ» »ç¿ëÇÏ°í ÀÖ´ÂÁö ¾Ë¾Æº¾½Ã´Ù. ¸ÅÅ©·Î´Â °ü½ÀÀûÀ¸·Î ´ë¹®ÀÚ·Î ÀÛ¼ºµÇ´Ï±î ÀÌÁ¡¿¡ À¯ÀÇÇؼ º¸¼¼¿ä. make´Â ½©»ó¿¡¼ Á¤ÀÇÇÑ È¯°æ º¯¼ö°ªµéÀ» ±×´ë·Î ÀÌ¿ëÇÑ´Ù´Â °ÍÀ» ¾Ë°í °è½Ã±â ¹Ù¶ø´Ï´Ù.
À§¿¡ ¿°ÅÇÑ ¸ÅÅ©·Î´Â make¿¡¼ Á¤ÀÇµÈ ¸ÅÅ©·ÎÁß ±×¾ß¸»·Î ÀϺο¡ Áö³ªÁö ¾Ê´Â´Ù. ÇÏÁö¸¸ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÔ¿¡ ÀÖ¾î °¡Àå ¸¹ÀÌ »ç¿ëÇÏ°Ô µÉ ¸ÅÅ©·Î µéÀÌ´Ù. ÀÌµé ¸ÅÅ©·Î´Â »ç¿ëÀÚ¿¡ ÀÇÇØ ÀçÁ¤ÀÇ °¡´ÉÇÏ´Ù. °¡·É gccÀÇ ¿É¼Ç Áß¿¡ µð¹ö±× Á¤º¸¸¦ Ç¥½ÃÇÏ´Â '-g' ¿É¼ÇÀ» ³Ö°í ½Í´Ù¸é, ¾Æ·¡¿Í °°ÀÌ ÀçÁ¤ÀÇ ÇÑ´Ù.
CFLAGS = -g
¿©±â¼ ÇÑ°¡Áö »ç½ÇÀ» »ý°¢ÇØ ºÁ¾ß ÇÒ °ÍÀÌ´Ù. make¿¡¼ À§¿¡ ³ª¿Â °ÍµéÀ»
¿Ö ¹Ì¸® Á¤ÇØ µÎ¾úÀ»±î? (¿ÖÀϱî¿ä?) make¿¡¼ ÀÌµé ¸ÅÅ©·Î¸¦ Á¦°øÇÏ°í
ÀÖ´Â ÀÌÀ¯´Â ³»ºÎÀûÀ¸·Î ÀÌµé ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ°Ô µÇ±â ¶§¹®ÀÌ´Ù. ¾î¶»°Ô
ÀÌ¿ëÇÏ´ÂÁö´Â È®ÀåÀÚ ±ÔÄ¢(Suffix rule)À» ¼³¸íÇÏ¸é¼ ÇØ´äÀ» Á¦°øÇÒ
°ÍÀÌ´Ù. ÀÌÁ¦ Makefile
À» ¸ÅÅ©·Î¸¦ ÀÌ¿ëÇÏ¿© ±ò²ûÇÏ°Ô(?)
ÀÛ¼ºÇØ º¸ÀÚ.
Makefile
OBJECTS = main.o read.o write.o
SRCS = main.c read.c write.c <- ¾ø¾îµµ µÊ
CC = gcc <- gcc ·Î ¼¼ÆÃ
CFLAGS = -g -c <- gcc ÀÇ ¿É¼Ç¿¡ -g Ãß°¡
TARGET = test <- °á°ú ÆÄÀÏÀ» test ¶ó°í ÁöÁ¤
$(TARGET) : $(OBJECTS)
$(CC) -o $(TARGET) $(OBJECTS)
clean :
rm -rf $(OBJECTS) $(TARGET) core
main.o : io.h main.c <- (1)
read.o : io.h read.c
write.o: io.h write.c
À§ÀÇ Makefile À» µ¿ÀÛ½ÃÄÑ º¸ÀÚ.
% make
gcc -g -c main.c -o main.o
gcc -g -c read.c -o read.o
gcc -g -c write.c -o write.o
gcc -o test main.o read.o write.o <- OK
% make clean
rm -rf main.o read.o write.o test core <- OK
±×·±µ¥ ¿©±â¼ ÇÑ°¡Áö ÀÌ»óÇÑ Á¡À» ¹ß°ßÇÏ°Ô µÉ °ÍÀÌ´Ù. .c ÆÄÀÏÀ» .o ÆÄÀÏ·Î ¹Ù²Ù´Â ºÎºÐÀÌ ¾ø´Âµ¥ ¾î¶»°Ô ÄÄÆÄÀÏÀÌ µÇ¾úÀ»±î? »©¸Ô°í ŸÀÌÇÎ ¸øÇÑ °ÍÀº ¾Æ´Ò±î ÇÏ°í... Àý´ë ¾Æ´Ô!
¾Õ¿¡¼ CFLAGS °°Àº ¸ÅÅ©·Î´Â make ÆÄÀÏÀÇ ³»ºÎ¿¡¼ ÀÌ¿ëµÈ´Ù°í ÇÏ¿´´Ù. ±×·¸´Ù¸é make´Â °ú¿¬ ¾îµð¿¡¼ ÀÌ¿ëÀ» ÇÒ±î? ¹Ù·Î ÄÄÆÄÀÏÇÏ´Â °÷¿¡¼ ÀÌ¿ëÀ» ÇÏ´Â °ÍÀÌ´Ù. µû¶ó¼ ¿ì¸®´Â CFLAGS¸¦ ¼ÂÆÃÇØ Áֱ⸸ Çϸé make°¡ ¾Ë¾Æ¼ ÄÄÆÄÀÏÀ» ¼öÇàÇÏ´Â °ÍÀÌ´Ù. (¾ó¸¶³ª Æí¸®Çմϱî!)
=> Âü°í: È®ÀåÀÚ ±ÔÄ¢¿¡¼ ´Ù½Ã Çѹø ÀÚ¼¼È÷ ¼³¸íÀ» ÇÏ°Ú½À´Ï´Ù.
(1) ¿¡ ÇØ´çÇÏ´Â ºÎºÐÀº ¾î¶² ÆÄÀÏÀÌ ¾îµð¿¡ ÀÇÁ¸ÇÏ°í ÀÖ´ÂÁö¸¦ Ç¥½ÃÇØ ÁÖ±â À§Çؼ ²À ÇÊ¿äÇÏ´Ù. .c ÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ´Â ºÎºÐÀº ÀÏ°ýÀûÀÎ ·çƾÀ¸·Î ÀÛ¼ºÇÒ ¼ö Àֱ⠶§¹®¿¡ À̵é ÆÄÀÏ°£ÀÇ ÀÇÁ¸ °ü°è(dependency)¸¦ µû·Î Ç¥½ÃÇØ ÁÖ¾î¾ß ÇÑ´Ù.
=> Âü°í: ÆÄÀÏ°£ÀÇ ÀÇÁ¸ °ü°è¸¦ ÀÚµ¿À¸·Î ÀÛ¼ºÇØ ÁÖ´Â À¯Æ¿¸®Æ¼°¡ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº ´ÙÀ½ Àå¿¡¼ ´Ù·ç±â·Î ÇÕ´Ï´Ù.
È®ÀåÀÚ ±ÔÄ¢À̶õ °£´ÜÈ÷ ¸»Çؼ ÆÄÀÏÀÇ È®ÀåÀÚ¸¦ º¸°í, ±×¿¡ µû¶ó ÀûÀýÇÑ ¿¬»êÀ» ¼öÇà½ÃÅ°´Â ±ÔÄ¢À̶ó°í ¸»ÇÒ ¼ö ÀÖ´Ù. °¡·É .c ÆÄÀÏÀº ÀϹÝÀûÀ¸·Î C ¼Ò½º Äڵ带 °¡¸®Å°¸ç, .o ÆÄÀÏÀº ¸ñÀû ÆÄÀÏ(Object file)À» ¸»ÇÏ°í ÀÖ´Ù. ±×¸®°í ´ç¿¬È÷ .c ÆÄÀÏÀº ÄÄÆÄÀÏµÇ¾î¼ .o ÆÄÀÏÀÌ µÇ¾î¾ß ÇÏ´Â °ÍÀÌ´Ù.
¿©±â¼ ÇÑ°¡Áö ¸ÅÅ©·Î°¡ µîÀåÇÏ°Ô µÈ´Ù. .SUFFIXES ¶ó°í ÇÏ´Â ¸ÅÅ©·ÎÀε¥ ¿ì¸®°¡ make ÆÄÀÏ¿¡°Ô ÁÖÀÇ ±í°Ô ó¸®ÇÒ ÆÄÀϵéÀÇ È®ÀåÀÚ¸¦ µî·ÏÇØ Áشٰí ÀÌÇØÇÏ¸é µÉ °ÍÀÌ´Ù.
.SUFFIXES : .c .o
À§ÀÇ Ç¥ÇöÀº '.c' ¿Í '.o' È®ÀåÀÚ¸¦ °¡Áø ÆÄÀϵéÀ» È®ÀåÀÚ ±ÔÄ¢¿¡ ÀÇ°ÅÇؼ ó¸®µÉ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. .SUFFIXES ¸ÅÅ©·Î¸¦ ÀÌ¿ëÇÑ ¿¹Á¦¸¦ »ìÆ캸ÀÚ.
Makefile
.SUFFIXES : .c .o
OBJECTS = main.o read.o write.o
SRCS = main.c read.c write.c
CC = gcc
CFLAGS = -g -c
TARGET = test
$(TARGET) : $(OBJECTS)
$(CC) -o $(TARGET) $(OBJECTS)
clean :
rm -rf $(OBJECTS) $(TARGET) core
main.o : io.h main.c
read.o : io.h read.c
write.o: io.h write.c
À§ÀÇ Makefile À» µ¿ÀÛ½ÃÄÑ º¸ÀÚ.
% make
gcc -g -c main.c -o main.o
gcc -g -c read.c -o read.o
gcc -g -c write.c -o write.o
gcc -o test main.o read.o write.o <- OK
È®ÀåÀÚ ±ÔÄ¢¿¡ ÀÇÇؼ make´Â ÆÄÀϵ鰣ÀÇ È®ÀåÀÚ¸¦ ÀÚµ¿À¸·Î ÀνÄÇؼ ÇÊ¿äÇÑ ÀÛ¾÷À» ¼öÇàÇÑ´Ù. Áï ¾Æ·¡ÀÇ ·çƾÀÌ ÀÚµ¿ÀûÀ¸·Î µ¿ÀÛÇÏ°Ô µÈ´Ù.
.c.o :
$(CC) $(CFLAGS) -c $< -o $@
=> Âü°í: gmake¿¡¼´Â ¾à°£ ´Ù¸£°Ô Á¤ÀǵǾî ÀÖÁö¸¸, ¿ì¼±Àº °°´Ù°í ÀÌÇØÇսôÙ. $< , $@ ¿¡ ´ëÇؼ´Â °ð ¼³¸íÇÕ´Ï´Ù.
¿ì¸®°¡ .SUFFIXES : .c .o ¶ó°í Ç߱⠶§¹®¿¡ make ³»ºÎ¿¡¼´Â ¹Ì¸® Á¤ÀÇµÈ .c (C ¼Ò½º ÆÄÀÏ)¸¦ ÄÄÆÄÀÏÇؼ .o (¸ñÀû ÆÄÀÏ)¸¦ ¸¸µé¾î ³»´Â ·çƾÀÌ ÀÚµ¿ÀûÀ¸·Î µ¿ÀÛÇÏ°Ô µÇ¾î ÀÖ´Ù. CC¿Í CFLAGS µµ ¿ì¸®°¡ Á¤ÀÇÇÑ ´ë·Î ġȯµÉ °ÍÀÓÀº ÀǽÉÇÒ ¿©Áö°¡ ¾ø´Ù.
make ³»ºÎ¿¡¼ ±âº»ÀûÀ¸·Î ¼ºñ½º¸¦ Á¦°øÇØ ÁÖ´Â È®ÀåÀÚµéÀÇ ¸®½ºÆ®¸¦ ¿°ÅÇØ º¸¸é ¾Æ·¡¿Í °°´Ù. °¢ È®ÀåÀÚ¿¡ µû¸¥ ÀÚ¼¼ÇÑ ¼³¸íÀº »ý·«ÇÑ´Ù.
.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
Makefile
³»ºÎ¿¡¼ .SUFFIXES ¸ÅÅ©·ÎÀÇ °ªÀ» ¼¼ÆÃÇØ ÁÖ¸é ³»ºÎÀûÀ¸·Î Á¤ÀǵÈ
È®ÀåÀÚÀÇ ¿¬»êÀÌ µ¿ÀÛÀ» ÇÏ°Ô µÈ´Ù. µû¶ó¼ È®ÀåÀÚ ±ÔÄ¢Àº make°¡ ¾î´À
È®ÀåÀÚ¸¦ °¡Áø ÆÄÀϵéÀ» ó¸®ÇÒ °ÍÀΰ¡¸¦ Á¤ÇØ ÁÖ´Â °ÍÀ̶ó°í »ý°¢ÇÒ ¼ö ÀÖ´Ù.
±×·¯³ª ÀÌ°ÍÀº ÇÊÀÚ¸¸ÀÇ »ý°¢ÀÏÁö ¸ô¶óµµ make¿¡¼ ÀÚµ¿ÀûÀ¸·Î È®ÀåÀÚ¸¦ ¾Ë¾Æ¼ ÇØÁÖ´Â °ÍÀÌ ÁÁ±ä ÇÏÁö¸¸, ÇÊÀÚ´Â ÀϺη¯ À§ÀÇ .c.o ¿¡ ÇØ´çµÇ´Â ºÎºÐÀ» ±×³É Á¤ÀÇÇؼ ¾²±æ ´õ ÁÁ¾ÆÇÑ´Ù. ÀÌ°ÍÀº Áö±Ý±îÁöÀÇ ½À°ü»ó ±×·¸Áö¸¸ ¿ØÁö ¿ì¸®°¡ Á¤ÀÇÇÏ´Â °ÍÀÌ ´õ ÀÚÀ¯·Ó°Ô(flexible) »ç¿ëÇÒ ¼ö ÀÖÀ» °Í °°±â ¶§¹®ÀÌ´Ù. ±×¸®°í ÀÌ·± ±â´ÉÀº ¿ì¸®°¡ ÀÛ¼ºÀ» ÇغÁ¾ß makeÀÇ ¸ÞÄ«´ÏÁòÀ» ´õ Àß ÀÌÇØÇÒ ¼ö ÀÖ´Ù°í »ý°¢ÇÑ´Ù.
Makefile
.SUFFIXES : .c .o
OBJECTS = main.o read.o write.o
SRCS = main.c read.c write.c
CC = gcc
CFLAGS = -g -c
INC = -I/home/raxis/include <- include Æнº Ãß°¡
TARGET = test
$(TARGET) : $(OBJECTS)
$(CC) -o $(TARGET) $(OBJECTS)
.c.o : <- ¿ì¸®°¡ È®ÀåÀÚ ±ÔÄ¢À» ±¸Çö
$(CC) $(INC) $(CFLAGS) $<-
clean :
rm -rf $(OBJECTS) $(TARGET) core
main.o : io.h main.c
read.o : io.h read.c
write.o : io.h write.c
% make
gcc -I/home/raxis/include -g -c main.c
gcc -I/home/raxis/include -g -c read.c
gcc -I/home/raxis/include -g -c write.c
gcc -o test main.o read.o write.o <- OK
make¿¡¼´Â ³»ºÎ ¸ÅÅ©·Î¶ó´Â °ÍÀÌ ÀÖ´Ù. ÀÌ°ÍÀº ¿ì¸®°¡ ¸¾´ë·Î Á¤ÇÒ ¼ö ÀÖ´Â ¸ÅÅ©·Î´Â Àý´ë ¾Æ´Ï´Ù. ´ë½Å ¸ÅÅ©·Î¸¦ ¿¬»ê, ó¸®Çϴµ¥ ¾²ÀÌ´Â ¸ÅÅ©·Î¶ó°í ÇÏ´Â °ÍÀÌ ´õ Àû´çÇÒ °ÍÀÌ´Ù.
Internal Macro
$* <- È®ÀåÀÚ°¡ ¾ø´Â ÇöÀçÀÇ ¸ñÇ¥ ÆÄÀÏ(Target)
$@ <- ÇöÀçÀÇ ¸ñÇ¥ ÆÄÀÏ(Target)
$< <- ÇöÀçÀÇ ¸ñÇ¥ ÆÄÀÏ(Target)º¸´Ù ´õ ÃÖ±Ù¿¡ °»½ÅµÈ ÆÄÀÏ À̸§
$? <- ÇöÀçÀÇ ¸ñÇ¥ ÆÄÀÏ(Target)º¸´Ù ´õ ÃÖ±Ù¿¡ °»½ÅµÈ ÆÄÀÏÀ̸§
=> Âü°í: Ã¥¿¡¼´Â $< ¿Í $?¸¦ ¾à°£ ±¸ºÐÇÏ°í ÀÖÁö¸¸ °ÅÀÇ °°´Ù°í ºÁµµ ¹«¹æÇÒ °ÍÀÔ´Ï´Ù.
°¢ ³»ºÎ ¸ÅÅ©·Î¿¡ ´ëÇÑ ¿¹¸¦ º¸±â·Î ÇÑ´Ù.
main.o : main.c io.h
gcc -c $*.c
$* ´Â È®ÀåÀÚ°¡ ¾ø´Â ÇöÀçÀÇ ¸ñÇ¥ ÆÄÀÏÀ̹ǷΠ$* ´Â °á±¹ main ¿¡ ÇØ´çÇÑ´Ù.
test : $(OBJS)
gcc -o $@ $*.c
$@´Â ÇöÀçÀÇ ¸ñÇ¥ ÆÄÀÏÀÌ´Ù. Áï test¿¡ ÇØ´çµÈ´Ù.
.c.o :
gcc -c $< (¶Ç´Â gcc -c $*.c)
$< ´Â ÇöÀçÀÇ ¸ñÇ¥ ÆÄÀϺ¸´Ù ´õ ÃÖ±Ù¿¡ °»½ÅµÈ ÆÄÀÏ À̸§À̶ó°í ÇÏ¿´´Ù. .o ÆÄÀϺ¸´Ù ´õ ÃÖ±Ù¿¡ °»½ÅµÈ .c ÆÄÀÏÀº ÀÚµ¿ÀûÀ¸·Î ÄÄÆÄÀÏÀÌ µÈ´Ù. °¡·É main.o¸¦ ¸¸µé°í ³ ´ÙÀ½¿¡ main.c¸¦ °»½ÅÇÏ°Ô µÇ¸é main.c´Â $<ÀÇ ÀÛ¿ë¿¡ ÀÇÇØ »õ·Ó°Ô ÄÄÆÄÀÏÀÌ µÈ´Ù.
=> Âü°í: ÀÌÁ¦
=> Âü°í: Makefile ÆÄÀÏÀ» ÀÛ¼ºÇØ ³õ°í, ±×³É make¸¸ Ä¡½Ã¸é make´Â
Makefile
ÀÇ ³»¿ëÀ» »ìÆ캸´Ù°¡ ù ¹ø° ¸ñÇ¥ ÆÄÀÏ¿¡ ÇØ´çµÇ´Â °ÍÀ»
½ÇÇà½ÃÅ°°Ô µË´Ï´Ù. µû¶ó¼ À§ÀÇ ¿¹Á¦¿¡¼´Â make test ¶ó°í Çصµ °°Àº
°á°ú¸¦ ³»°Ô µË´Ï´Ù. ¹Ý¸é clean¿¡ ÇØ´çÇÏ´Â ºÎºÐÀ» ÀºÎºÐ¿¡ µÎ°Ô µÇ¸é
make´Â Ç×»ó make cleanÀ» ¼öÇàÇÏ°Ô µË´Ï´Ù.
% make <- make clean ÀÌ ½ÇÇàµÊ
rm -rf main.o read.o write.o test core
% make test <- °Á¦ÀûÀ¸·Î test °¡ »ý¼ºµÇ°Ô ÇÑ´Ù.
gcc -I/home/raxis/include -g -c main.c
gcc -I/home/raxis/include -g -c read.c
gcc -I/home/raxis/include -g -c write.c
gcc -o test write.c main.o read.o write.o <- OK
Makefile
ÀÇ ÀÌÇظ¦ µ½±â À§Çؼ Makefile
À» Çϳª ´õ ÀÛ¼ºÇØ º¸±â·Î ÇÑ´Ù.
make.tex ÆÄÀÏÀ» make.dvi·Î ¸¸µç ´ÙÀ½ ÀÌ°ÍÀ» ´Ù½Ã make.ps·Î ¸¸µå´Â
°ÍÀÌ´Ù. º¸ÅëÀÇ ¼ø¼¶ó¸é ¾Æ·¡¿Í °°´Ù.
% latex make.tex <- make.dvi °¡ ¸¸µé¾îÁø´Ù.
% dvips make.dvi -o <- make.ps °¡ ¸¸µé¾îÁø´Ù.
º¸ÅëÀÇ °¡Àå °£´ÜÇÑ Makefile
À» ÀÛ¼ºÇØ º¸¸é ¾Æ·¡¿Í °°´Ù.
Makefile
make.ps : make.dvi
dvips make.dvi -o
make.dvi : make.tex
latex make.tex
À§¿Í °°Àº ÀÏÀ» ÇÏ´Â Makefile
À» ´Ù¸£°Ô Çѹø ÀÛ¼ºÇØ º¸ÀÚ. ¸ÅÅ©·Î¸¦
¾î´ÀÁ¤µµ »ç¿ëÇØ º¸±â·Î Çϸç, È®ÀåÀÚ ±ÔÄ¢À» Çѹø Àû¿ëÇØ º¸±â·Î ÇÑ´Ù.
Makefile
.SUFFIXES : .tex .dvi
TEX = latex <- TEX ¸ÅÅ©·Î¸¦ ÀçÁ¤ÀÇ
PSFILE = make.ps
DVIFILE = make.dvi
$(PSFILE) : $(DVIFILE)
dvips $(DVIFILE) -o
make.ps : make.dvi
make.dvi : make.tex
% make
latex make.tex
....
dvips make.dvi -o <- OK
´ÙÀ½Àå ¿¹°í
¹«¾ùÀΰ¡¸¦ ±Û·Î ¼³¸íÇÑ´Ù´Â °ÍÀÌ Âü Èûµå³×¿ä...
»ç½Ç ¿À´Ã ÇÑ °Í¸¸ °¡Áö°íµµ Makefile
¿¡ ´ëÇÑ ¾î´À Á¤µµÀÇ Áö½ÄÀ»
°®Ãß¾ú´Ù°í ¸»ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀڽŸ¸ÀÇ Makefile
À» Çѹø ÀÛ¼ºÇØ º¸½ÃÁÒ.
ÇÁ·Î±×·¥µµ ±¦Âú°í, .tex ÆÄÀÏÀ» .ps ÆÄÀÏ·Î ¸¸µå´Â °úÁ¤À» Makefile
·Î
¸¸µé¾î º¸´Â °Íµµ ÁÁÀº ¿¬½ÀÀÌ µÉ °ÍÀÔ´Ï´Ù.
´ÙÀ½ Æí¿¡¼ ¿©·¯ºÐ¿¡°Ô ¼Ò°³ÇØ µå¸± °ÍÀº make ¿É¼Ç, makefile ÀÛ¼º
Áöħ(guideline), make »ç¿ë ½Ã¿¡ ³ªÅ¸³ª´Â ¿¡·¯ÀÇ ¿øÀΰú ±× ´ëó ¹æ¹ýÀÌ
µÉ °Í °°±º¿ä. (¾ÆÁ÷ È®Á¤µÈ °ÍÀº ¾Æ´ÏÁö¸¸...)
Makefile
¿¡ °üÇÑ ÀÔ¹® °úÁ¤Àº ´ÙÀ½ ÀåÀ¸·Î ³¡³»°í, 4ÀåºÎÅÍ´Â ¾à°£
°í±Þ½º·¯¿î ±â´ÉÀ» °ÁÂÇϵµ·Ï ÇÏ°Ú½À´Ï´Ù. ¸¹ÀÌ Àоî ÁÖ¼¼¿ä.
´ó½º ¿´½À´Ï´Ù.