Make ±âÃÊ»ç¿ë¹ý
Make ±âÃÊ»ç¿ë¹ý ¶
1.1. ½ÃÀÛÇϱâÀü¿¡ ¶ÇÁ·Î±×·¡¹ÖÀ» ¹è¿ì·Á¸é ¿ì¼± "make"ÀÇ ±âº»¿ë¹ýÀÌ¶óµµ ¾Ë°í ½ÃÀÛÇÏÀÚ´Â ÁÖÀåÀ» Çغ¾´Ï´Ù. ±× ¸¸Å ¸Å¿ì Áß¿äÇÑ À¯Æ¿¸®Æ¼ÀÔ´Ï´Ù. ³ª¸§´ë·Î °£ÆíÇÑ ¹®¹ý°ú °¡µ¶¼ºÀÌ ³ôÀº ¹®¹ý ¶§¹®¿¡ ¿äÁò ´ëºÎºÐÀÇ °Å´ëÇÑ °ø°³ ÇÁ·ÎÁ§Æ®µéÀº "make"¸¦ ³Î¸® »ç¿ëÇÏ°í ÀÖ½À´Ï´Ù. ²À ÇÁ·Î±×·¡¹ÖÀÇ ¼¼°è¿¡ ÀÔ¹®À» ÇÏ°íÀÚ ÇϽô ºÐµé²²¼´Â "make"ÀÇ »ç¿ë¹ýÀ» Àû¾îµµ ±âº»¹®¹ýÀÌ¶óµµ ¾Ë°í °è¼Å¾ß ÇÕ´Ï´Ù. ±×·¡¼ ÇÊÀÚ´Â °£·«ÇÏ°Ô³ª¸¶ µµ¿òÀÌ µÇ°íÀÚ ÀÌ·¸°Ô ¹®¼·Î ³²±é´Ï´Ù. ºÎµð ¸ÚÁø GNU °³¹ßÀÚ°¡ µÇ½Ã±æ ¹Ù¶ø´Ï´Ù.
1.2. Make ÀÇ ¸ñÀû ¶¿ì¸®°¡ ÀϹÝÀûÀ¸·Î °³¹ßÇÏ°í °ü¸®ÇÏ´Â ÇϳªÀÇ ÇÁ·ÎÁ§Æ®´Â C source¸¦ ÄÄÆÄÀÏÇÏ¿© Object ÆÄÀÏÀ» ¸¸µé°í ÀÌ·¯ÇÑ Object ¸î°³¸¦ ¹¾î¼ ¸µÅ©(Link)°úÁ¤À» °ÅÃļ ÃÖÁ¾ ¸ñÀûÀÎ ½ÇÇàÆÄÀÏÀ» »ý¼ºÇÕ´Ï´Ù. À̶§ »ç¿ëÇÏ´Â ¸í·ÉÀº ´ÙÀ½°ú °°°ÚÁÒ. ¾Æ~ ¹«Áö ±æ´Ù~!
bash# cc -O2 -Wall -Werror -fomit-frame-pointer -c -o test.o test.c
bash# ls test.c test.o bash# ld -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o test /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o test.o bash# ./test Hello world ! bash# _ 1.3. ±âº»±ÔÄ¢ ¶"make"´Â Å©°Ô Target, Depend, Command, Macro ·Î ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù. ¿ì¼± ±âº»ÀûÀ¸·Î Target, Depend, Command ÀÇ ±¸¼ºÀ» »ìÆ캸°Ú½À´Ï´Ù.
<Target>: <Depend> ?... [[;] <Command>]
<Åǹ®ÀÚ><Command> ¿©±â¼ "Target"Àº »ý¼ºÇÏ°íÀÚ ÇÏ´Â ¸ñÀû¹°À» ÁöĪÇϸç Depend ´Â TargetÀ» ¸¸µé±â À§Çؼ ÇÊ¿äÇÑ ¿ä¼Ò¸¦ ±â¼úÇÏ°Ô µË´Ï´Ù. ±×¸®°í Command ´Â ÀÏ¹Ý Shell ¸í·ÉÀÌ ¿É´Ï´Ù. À̶§ Command´Â Depend ÀÇ ÆÄÀÏ»ý¼º½Ã°£(¶Ç´Â º¯°æµÈ ½Ã°£)À» Target°ú ºñ±³ÇÏ¿© Target º¸´Ù DependÀÇ ÆÄÀÏÀÌ ½Ã°£ÀÌ º¸´Ù ÃÖ±ÙÀÎ °æ¿ì·Î ÆǴܵɶ§¿¡¸¸ ½ÇÇàµË´Ï´Ù. ¹°·Ð ÀÌ°Í¿¡ ´ëÇÑ ¿¹¿ÜÀûÀÎ ±ÔÄ¢ÀÌ ÀÖ½À´Ï´Ù¸¸ ÀÏ´Ü ¹«½ÃÇÏ°í ¹Þ¾ÆµéÀ̼¼¿ä. ÀÌÁ¦ °£´ÜÈ÷ ´ÙÀ½°ú °°ÀÌ "Makefile" À̶ó´Â ÆÄÀϸíÀ¸·Î ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÏ¿© "make"ÀÇ ÇൿÀ» ±â¼úÇÕ´Ï´Ù. ´Ü, ÁÖÀÇÇÒ°ÍÀº Command ´Â ¹Ýµå½Ã ¾Õ¿¡ <TAB>¹®ÀÚ°¡ ¿Í¾ß ÇÕ´Ï´Ù. ¹°·Ð ¿¹¿Ü»óȲÀÌ ÀÖ±â´Â ÇÏÁö¸¸ ³ªÁß¿¡ ±×¿¡ ´ëÇÑ ³»¿ëÀ» ´Ù·ç±â·Î ÇÏ°í ÀÏ´Ü ld, cc ¸í·É ¾Õ¿¡ ¹Ýµå½Ã <TAB>¹®ÀÚ·Î ÀÔ·ÂÇϼ¼¿ä. ±×¸®°í ³Ê¹« ±ä ÁÙÀº ¹é½½·¡½¬(\)¿Í °³ÇàÀ» ÅëÇÏ¿© ³ª´¼ö ÀÖ½À´Ï´Ù.
test: test.o
ld -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 \ -o test \ /usr/lib/crt1.o \ /usr/lib/crti.o \ /usr/lib/crtn.o \ test.o test.o: test.c cc -O2 -Wall -Werror -fomit-frame-pointer -c -o test.o test.c
bash# make test
cc -O2 -Wall -Werror -fomit-frame-pointer -c -o test.o test.c ld -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o test /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o test.o bash# _
bash# make test
make: `test'´Â ÀÌ¹Ì °»½ÅµÇ¾ú½À´Ï´Ù. bash# _
bash# touch test.c
bash# make test cc -O2 -Wall -Werror -fomit-frame-pointer -c -o test.o test.c ld -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o test /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o test.o bash# _ 1.4. Macro ¶¸ÅÅ©·Î´Â ´ÙÀ½°ú °°ÀÌ "=" ¹®ÀÚÀÇ ¿ÞÆí¿¡´Â MacroÀÇ ´ëÇ¥À̸§(Label)À» ±â¼úÇÏ°í ¿À¸¥Æí¿¡´Â ±× ³»¿ëÀ» Àû½À´Ï´Ù. À̶§ "=" ¹®ÀÚ¿¡ ÀÎÁ¢ÇÑ ¾çÂÊÀÇ °ø¹é(Space)¹®ÀÚ´Â ¹«½ÃµË´Ï´Ù. ÀÌ°ÍÀº ¸Å¿ì ±âº»ÀûÀÎ Macro¸¦ ¿¹±âÇϴ°ÍÀ̸ç ÀÌ ¹Û¿¡µµ ¸î°¡Áö È®ÀåµÈ Macro °¡ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ÀÏ´Ü ±×°ÍÀº ³ªÁß¿¡ ¿¹±âÇϵµ·Ï ÇÏ°Ú½À´Ï´Ù.
<Macro name> = <Macro ³»¿ë>
CC = cc
LD = ld CFLAGS = -O2 -Wall -Werror -fomit-frame-pointer -c LDFLAGS = -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 STARTUP = /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o test: test.o $(LD) $(LDFLAGS) -o test $(STARTUP) test.o test.o: test.c $(CC) $(CFLAGS) -o test.o test.c 1.5. ±âº» È®ÀåÀÚ ±ÔÄ¢ ¶¿ì¸®´Â º¸Åë C source¸¦ ¸ñÀûÆÄÀÏ·Î ÄÄÆÄÀÏÇÕ´Ï´Ù. ÀÌ°ÍÀº È®ÀåÀÚ°¡ Åë»ó ".c"¿¡¼ ".o"¸¦ ¸¸µé¾î ³»´Â ±ÔÄ¢ÀÌ »ý¼ºµÉ¹ý ÇÕ´Ï´Ù. "make"´Â ÀÌÁ¡¿¡ Âø¾ÈÇÏ¿© ´ÙÀ½°ú °°Àº È®ÀåÀÚ ±ÔÄ¢À» ÀÌ¿ëÇÒ¼ö ÀÖ½À´Ï´Ù. ¹°·Ð ÀÌ°ÍÀº ÇÑ°¡Áö ¹æ¹ýÀÏ »ÓÀ̸ç ÀÌ ¹Û¿¡µµ ¸î°¡Áö ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
.c.o:
$(CC) $(CFLAGS) -o $@ $<
CC = cc
LD = ld CFLAGS = -O2 -Wall -Werror -fomit-frame-pointer -c LDFLAGS = -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 STARTUP = /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o test: test.o $(LD) $(LDFLAGS) -o $@ $(STARTUP) $^ .c.o: $(CC) $(CFLAGS) -o $@ $< 1.6. °¡Â¥ target ¶ÀÌÁ¦ Áö±Ý±îÁö ÀÛ¼ºÇÑ "Makefile"À» »ç¿ëÇغ¸¸é ÇÑ°¡Áö ºÒÆíÇÑ Á¡À» ´À³¤ ºÐµéÀÌ °è½Ç°Ì´Ï´Ù. "test.c"·Î "test.o"¸¦ ¸¸µé°í "test.o"·Î "test"¸¦ ¸¸µéµµ·Ï ÀÛ¼ºÇÏ¿´Áö¸¸ ¼Ò½ºÆÄÀÏÀÇ ¼öÁ¤ÀÌ ¾ø´Â °æ¿ì Ç×»ó "make"´Â ´õÀÌ»óÀÇ ÄÄÆÄÀÏ ¹× ¸µÅ©°úÁ¤À» ÇÏÁö ¾Ê´Â Á¡ÀÔ´Ï´Ù. ¶§¹®¿¡ °£È¤ ´Ù½Ã ±ú²ýÈ÷ ºôµåÇÏ°í ½ÍÀ»¶§ "touch test.c"¸¦ ¼öÇàÇϰųª "rm test.o test" ¸¦ ¼öÇàÇØ¾ß ÇÕ´Ï´Ù. ÀÌ°Í ¿ª½Ã ¸Å¿ì ºÒÆíÇÕ´Ï´Ù. À̸¦ ÇؼÒÇÏ°íÀÚ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºµÉ¼ö ÀÖ°Ú½À´Ï´Ù.
CC = cc
LD = ld RM = rm -f CFLAGS = -O2 -Wall -Werror -fomit-frame-pointer -c LDFLAGS = -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 STARTUP = /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o clean: $(RM) test.o test test: test.o $(LD) $(LDFLAGS) -o $@ $(STARTUP) $^ .c.o: $(CC) $(CFLAGS) -o $@ $<
CC = cc
LD = ld RM = rm -f CFLAGS = -O2 -Wall -Werror -fomit-frame-pointer -c LDFLAGS = -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 STARTUP = /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o .PHONY: all clean all: test clean: -$(RM) test.o test test: test.o $(LD) $(LDFLAGS) -o $@ $(STARTUP) $^ .c.o: $(CC) $(CFLAGS) -o $@ $< 1.7. ÀÀ¿ë ¶ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ 4°³ÀÇ ÆÄÀÏÀ» ÀÛ¼ºÇÏ¿© ÇϳªÀÇ ÇÁ·ÎÁ§Æ®¸¦ ÀÛ¼ºÇÏ¿´´Ù°í ÇսôÙ.
hello.c
#include <stdio.h>
void HelloWorld(void) { fprintf(stdout, "Hello world.\n"); }
#include <stdio.h>
#include "hello.h" int main(void) { HelloWorld(); return(0); }
extern void HelloWorld(void);
CC = cc
LD = ld RM = rm -f CFLAGS = -O2 -Wall -Werror -fomit-frame-pointer -v -c LDFLAGS = -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 STARTUP = /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o BUILD = test OBJS = test.o hello.o .PHONY: all clean all: $(BUILD) clean: ; $(RM) *.o $(BUILD) test: $(OBJS) ; $(LD) $(LDFLAGS) -o $@ $(STARTUP) $^ # ÀÇÁ¸°ü°è ¼º¸³ hello.o: $($@:.o=.c) $($@:.o=.h) Makefile test.o: $($@:.o=.c) hello.h Makefile # È®ÀåÀÚ ±ÔÄ¢ (ÄÄÆÄÀÏ °øÅë ±ÔÄ¢) .c.o: ; $(CC) $(CFLAGS) -o $@ $< À§¿¡¼ "$($@:.o=.c)" ¶ó´Â ÀÌ»óÇÑ ¹®ÀÚ¿ÀÌ Á» ¸¶À½¿¡ ¾Èµé°Ì´Ï´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀº ¸Å¿ì ÇÔÃàÀûÀÎ ¸ÅÅ©·ÎÀÌ¸ç ¸¹ÀÌµé ¾Ö¿ëÇÏ°í ÀÖ´Â °Ì´Ï´Ù. ´ë·« ´ÙÀ½°ú °°Àº Çü½ÄÀ» »ç¿ëÇÕ´Ï´Ù. "$(<¹®ÀÚ¿>:<¿ìÃøÀ¸·ÎºÎÅÍ ¸ÅĪµÉ ¹®ÀÚ¿>=<ġȯµÉ ¹®ÀÚ¿>)" ÀÌ°ÍÀº Áï, "$@" ºÎºÐÀº ÀÚ½ÅÀÇ TargetÀÎ "hello.o" ¶Ç´Â "test.o"¸¦ ¸»ÇÕ´Ï´Ù. ±×¸®°í °Å±â¼ ¿ìÃøÀ¸·ÎºÎÅÍ ".o"°¡ ¹ß°ßµÇ¸é ".c"·Î ġȯÇ϶ó´Â ¶æÀÔ´Ï´Ù. Áï, "$(hello.o:.o=.c)" ¶Ç´Â "$(test.o:.o=.c)"·Î È®ÀåµÇ°í ¿©±â¼ ´Ù½Ã °¢°¢ "hello.c" ¿Í "test.c"·Î ġȯµÇ¾î °á±¹ ÇØ´ç ¼Ò½º¸¦ ÁöĪÇÏ°Ô µÇ´Â ¼ÀÀÔ´Ï´Ù. ±×¸®°í Command ºÎºÐÀÌ <TAB>ÀÌ ¾²ÀÌÁö ¾Ê°í ÇÑÁÙ¿¡ ";"(¼¼¹ÌÄÝ·Ð)À¸·Î ºÐ¸®µÇ¾î¼ ÇØ´ç ¶óÀο¡ Á÷Á¢ Command °¡ ¾²ÀÌ´Â °ÍÀ» È®ÀÎÇϽǼö ÀÖÀ»°Ì´Ï´Ù. ¹«Áö °Å´ëÇÑ "Makefile"À» °£·«È÷ º¸ÀÌ°Ô Çϱâ À§Çؼ ÀÌ·¸°Ôµµ »ç¿ëÇÒ¼ö ÀÖ´Ù´Â °ÍÀ» ¿¹·Î º¸ÀΰÍÀÔ´Ï´Ù. ÀÇÁ¸°ü°è¸¦ ¼º¸³ÇÏ´Â ºÎºÐÀº Command °¡ ¾ø´Â°ÍÀ» º¼¼ö Àִµ¥ ÀÌ°ÍÀº ºñ½ÁÇÑ ´Ù¸¥ Target¿¡¼ Command °¡ °áÇÕµÇ¾î ¼öÇàµÉ¼ö ÀÖ°í ¿©±â¼´Â ".c.o: ; ..." ºÎºÐÀÇ Command °¡ °áÇյ˴ϴÙ. ¿©±â¼ ÀÇÁ¸°ü°è¸¦ ÃÖ´ëÇÑ ÀÚ¼¼ÇÏ°Ô ±â¼úÇÏ¿´´Âµ¥ ¸¸¾à "hello.h" °¡ º¯°æµÈ´Ù¸é "hello.o"¿Í "test.o"´Â ´Ù½Ã ºôµåµÉ°ÍÀÔ´Ï´Ù. ¶ÇÇÑ "Makefile" µµ ¼öÁ¤µÇ¸é ´Ù½Ã ºôµåµÉ°ÍÀ̶ó´Â °ÍÀÌ ¿¹»óµË´Ï´Ù. ÀÌó·³ ÀÇÁ¸°ü°è¸¦ µû·Î ±â¼úÇÏ´Â ÀÌÀ¯´Â Â÷ÈÄ¿¡ ¿©·¯ºÐµéÀÌ »ç¿ëÇϽôٺ¸¸é ÀÌÀ¯¸¦ ¾Ë°Ô µÉ°Ì´Ï´Ù. ÀÇÁ¸°ü°è¶ó´Â°Ô ¼·Î ±²ÀåÈ÷ À¯±âÀûÀ¸·Î °É¸®´Â °æ¿ì°¡ ¸¹±â ¶§¹®¿¡ º¸´Ù º¸±â ÆíÇÏ°Ô ÇÏ´Â ÀÌÀ¯µµ ÀÖ°í Â÷ÈÄ¿¡ ÀÇÁ¸°ü°è°¡ º¯°æµÇ¾úÀ»¶§ ½±°Ô ã¾Æ¼ º¯°æÀ» ÇÒ¼ö ÀÖµµ·Ï Çϴ°͵µ ÇÑ°¡Áö ÀÌÀ¯ÀÔ´Ï´Ù. ¾ÆÁÖ Á¶±Ý¸¸ °øÅëÀûÀÎ ÀÇÁ¸°ü°è¸¦ Á¤¸®Çؼ ÀÛ¼ºÇÑ´Ù¸é ´ÙÀ½°ú °°À̵µ ÀÛ¼ºÇÒ¼ö ÀÖ½À´Ï´Ù. ¹Ù·Î TargetÀÌ Çѹø¿¡ 2°³ ÀÌ»óÀÌ Á¤Àǵɼöµµ ÀÖ´Ù´Â °Ì´Ï´Ù.
CC = cc
LD = ld RM = rm -f CFLAGS = -O2 -Wall -Werror -fomit-frame-pointer -v -c LDFLAGS = -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 STARTUP = /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o BUILD = test OBJS = test.o hello.o .PHONY: all clean all: $(BUILD) clean: ; $(RM) *.o $(BUILD) test: $(OBJS) ; $(LD) $(LDFLAGS) -o $@ $(STARTUP) $^ # ÀÇÁ¸°ü°è ¼º¸³ $(OBJS): $($@:.o=.c) hello.h Makefile # test.o hello.o: $($@:.o=.c) hello.h Makefile # È®ÀåÀÚ ±ÔÄ¢ (ÄÄÆÄÀÏ °øÅë ±ÔÄ¢) .c.o: ; $(CC) $(CFLAGS) -o $@ $< 1.8. ´Ù¸¥ MakefileÀÇ Æ÷ÇÔ ¶make¸¦ ÀÛ¼ºÇÏ´Ù º¸¸é ±²ÀåÈ÷ Å« ±Ô¸ðÀÇ ÇÁ·ÎÁ§Æ®¿¡¼´Â MakefileÀÌ ¸Å¿ì Ä¿Á®¼ ´Ù·ç±â ¾î·Á¿ï ¼ö ÀÖ½À´Ï´Ù. À̶§ MakefileÀ» ÀûÀýÈ÷ ³ª´©¾î ´Ù¸¥ ÆÄÀÏ·Î ÀúÀåÇÏ°í include ±¸¹®À¸·Î À̸¦ Æ÷ÇÔÇÏ¿© Çؼ®ÇÒ ¼ö ÀÖµµ·Ï ÇÒ ¼ö ÀÖ½À´Ï´Ù.
include <Makefile-names...>
include ±¸¹®¿¡´Â º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ÆÄÀÏ°ú ÆÄÀÏ »çÀÌ´Â °ø¹éÀ¸·Î ±¸ºÐÇÕ´Ï´Ù. ±×¸®°í Æ÷ÇÔÇÏ°íÀÚ ÇÏ´Â MakefileÀÌ ¾øÀ»¼öµµ ÀÖ´Â °ÍÀ» Çã¿ëÇϱâ À§Çؼ´Â ´ë½¬(-)¸¦ include ¾Õ¿¡ ºÙ¿© »ç¿ëÇϵµ·Ï Çϸé ÀÖ´Â °æ¿ì´Â Æ÷ÇÔÇÏ°í ±×·¸Áö ¾ÊÀº °æ¿ì´Â ¹«½ÃÇϵµ·Ï ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
EXT_MAKEFILE:=build.mk
-include *.mk $(EXT_MAKEFILE) 1.9.1. GNU Make¿¡¼ ±âº»ÀûÀ¸·Î ¿¹¾àµÇ¾î »ç¿ëµÇ´Â ȯ°æº¯¼ö ¶
1.9.2. Windows¿¡¼ÀÇ GNU Make »ç¿ë ¶
1.9.3. º¹ÀâÇÑ Ä¡È¯ ¶
1.10.1. °ø¹éÀ» Æ÷ÇÔÇÑ µð·ºÅ丮¸í ¶Ç´Â ÆÄÀÏ¸í¿¡ ´ëÇÑ ¹®Á¦ ¶
1.10.2. GNU make v3.81 ÀÌÈÄ ¹öÁ¯°ú ±× ÀÌÀüÀÇ ¹öÁ¯°£ ±â´ÉÀÇ Á¦¾à ¶
1.11. Åä·Ð¹× Àâ´ã ¶Á¶±Ý¾¿ "make"¹®¹ýÀ» ÀÍÈú¶§¸¶´Ù ¿ØÁö ¾ÏÈ£È °°Àº ³¿»õ°¡ ³ªÁö¸¸ °á±¹ ³ªÁß¿¡ »ç¿ëÇÏ´Ù º¸¸é ±²ÀåÈ÷ À¯¿ëÇÕ´Ï´Ù. ÀÏ´Ü ÁÖÀÇÇÒ°ÍÀº µÇµµ·ÏÀ̸é Depend ´Â ÃÖ´ëÇÑ ÀÚ¼¼È÷ °É¾îÁÖ¸é ÁÁ´Ù´Â Á¡À» °Á¶ÇÏ¸é¼ À̸¸ ¸¶Ä¡°Ú½À´Ï´Ù. ºñ·Ï ÀÌ ¹®¼´Â ¸ðµç "make"¹®¹ýÀ» ´Ù·çÁö´Â ¸øÇÏ¿´Áö¸¸ ¸Å¿ì ±âº»ÀûÀÎ "make"ÀÇ ±â´ÉÀ» ÀÍÈ÷´Âµ¥ ¸ñÀûÀ» °¡Áö°í ÀÛ¼ºÇÏ¿´°í »ç½Ç»ó ÈξÀ ¸¹Àº ±â´ÉÀÌ ÀÖ´Ù´Â Á¡À» ²À ¿°µÎÇØµÎ½Ã°í ¿¬±¸Çغ¸¼¼¿ä.
1.12. Âü°í¹®Çå ¶
|
To laugh at men of sense is the privilege of fools. |