¾Õ¿¡¼ ¸ÅÅ©·Î¿¡ ´ëÇØ¼ ´ëÃæ ¾ð±ÞÀ» Çß´Ù. ÇÁ·Î±×·¥À» Â¥º» »ç¶÷À̳ª
·ÎÅͽº, ÇѱÛ, ¿¢¼¿ µîÀÇ ¸ðµç ÆÐŰÁö¿¡¼ ¸ÅÅ©·Î¶ó´Â °ÍÀ» »ç¿ëÇÏ°Ô µÈ´Ù.
Àº¿¬Áß¿¡ ¸ÅÅ©·ÎÀÇ Á¤ÀÇ´Â ´ëÃæ ÁüÀÛÇϰí ÀÖÀ» °ÍÀÌ´Ù. ÀÌ¹Ì ¾Ë°í Àִ¹ٿÍ
°°ÀÌ ¸ÅÅ©·Î´Â ƯÁ¤ÇÑ Äڵ带 °£´ÜÇÏ°Ô Ç¥ÇöÇÑ °Í¿¡ Áö³ªÁö ¾Ê´Â´Ù.
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ÀåºÎÅÍ´Â ¾à°£
°í±Þ½º·¯¿î ±â´ÉÀ» °ÁÂÇϵµ·Ï ÇϰڽÀ´Ï´Ù. ¸¹ÀÌ Àоî ÁÖ¼¼¿ä.
´ó½º ¿´½À´Ï´Ù.