LCTHW-Excercise 2:Python ๋ง๋ค๊ธฐ
ํ์ด์ฌ์์๋ ๊ทธ์ python์ ์น๊ณ ๋ด๊ฐ ์คํํ๊ณ ์ ํ๋ ์ฝ๋๋ฅผ ๋ฃ์ผ๋ฉด, ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ๊ฐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๋ ์ํฌํธํด์ ์คํํด์ค๋๋ค. ํ์ง๋ง C๋.. ์์ ํ ๋ค๋ฅด์ฃ . C ํ๋ก๊ทธ๋จ์ ์คํํ๋ ค๋ฉด ์์ค๋ฅผ ์ปดํ์ผ์ ํด์, ํ๋์ ๋ฐ์ด๋๋ฆฌ๋ก ๋ง๋ค์ด์ผ๋ง ํฉ๋๋ค. ๋ฌด์ฒ.. ๊ณ ํต์ค๋ฌ์ด ๊ณผ์ ์ด์ง๋ง ์ง๋ ์๊ฐ์ ์ด๋ฏธ make๋ฅผ ํ์ฉํด์ ํด๋ดค์์ฃ !
์ด๋ฒ ์๊ฐ์๋, C๋ฅผ ๋ฐฐ์ฐ๋ ๋ฐ ์์ด GNU make๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊ฒ์ธ์ง ๋ค๋ฃฐ๊ฒ๋๋ค. ๋จ์ ์๊ฐ์๋ ๋น์ ๋ง์ ํ์ด์ฌ์ ๋ง๋ค๋ฉด ๋ฉ๋๋ค. ํ์ด์ฌ์ด ํด์ฃผ๋ ๊ฒ ์ฒ๋ผ, ๋น๋๋ ํด์ฃผ๊ณ ํ
์คํธ๋ ๋๋ ค์ฃผ๊ณ ํ์ํ ๋ชจ๋ ๊ฒ๋ค์ ์ค๋นํด์ฃผ๋ ๊ฒ์ด์ฃ .
๋จ์ง.. Makefile์ ์ด์ฉํด์ ๋น์ ์ Cํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ท์ฐฎ์ ๊ฒ๋ค์ ์ด๋ป๊ฒ ๋์ ํ ์ ์๋์ง ๋ณด์ฌ๋๋ฆด๊ฒ์. ์ค์ ๋ก ํด๋ณด์ง ์๊ฒ ์ง๋ง, ์ ์ ์๊ฐMakefile์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด 'master make'๋ ๋ณด์๊ฒ ๋ ๊ฒ๋๋ค.
์ฐ์ ์ฒซ ๊ฑธ์์, ์ด๋ฏธ ์ด๋ป๊ฒ ๋น๋ํ ๊ฒ์ธ์ง ์๊ณ ์๋ ํ๋ก๊ทธ๋จ์ make๋ก ๋น๋ํด ๋ณด๋ ๊ฒ๋๋ค. Make๋ ์ด๋ฏธ ์ฌ๋ฌ๊ฐ์ง ํ์ผ๋ค์ ์ด๋ป๊ฒ ๋น๋ํ ๊ฒ์ธ์ง์ ๋ํด ์์ญ๋
๊ฐ ๊ณต๋ถํด์์ต๋๋ค. ๋น์ ์ ์๋ง ์ด์ ์ ์ด ์์ ๋ฅผ ํด๋ดค์ ๊ฑฐ์์:
$ make ex1 # or this one too $ CFLAGS="-Wall" make ex1
์ฒซ ๋ฒ์งธ ๋ผ์ธ์์ ์ฐ๋ฆฌ๋ "ex1์ด๋ผ๋ ํ์ผ์ ๋ง๋ค๊ณ ์ถ์ด"๋ผ๊ณ Make์๊ฒ ์๋ ค์ค๋๋ค. ๊ทธ๋ฌ๊ณ ๋๋ฉด Make๋ ์ด๋ ๊ฒ ํ๊ฒ ์ฃ .
ex1์ด๋ผ๋ ํ์ผ์ด ์ด๋ฏธ ์๋?
์๋ค๋ฉด, ์ข์. ex1์ผ๋ก ์์ํ๋ ํ์ผ์?!
์ค์ค ex1.c ๋ฐ๊ฒฌ. ๊ทธ๋ผ ์ฐ๋ฆฌ .cํ์ผ ๋น๋ํ ์ ์๋?
ใ
ใ
. cc ex1.c 0o ex1์ผ๋ก ๋น๋ ๊ฐ๋ฅํจ
cc๋ก ex1.c๋ก ex1ํ์ผ ๋ง๋ค์ด ๋๋ฆผ.
์๊น ๋ดค๋ command์์ ๋๋ฒ์งธ ๋ผ์ธ์ make์๊ฒ "modifiers"๋ฅผ ์๋ ค์ฃผ๋ ์ญํ ์ ํฉ๋๋ค. ํน์ Unix shell์ ์ต์ํ์ง ์๋ค๋ฉด ์ด๊ฑธ ์์ ํ๊ฒฝ๋ณ์(environment variables)๋ก ๋ง๋ค์ด์ ์คํํ๋ ํ๋ก๊ทธ๋จ๋ค์ด ์ฌ์ฉํ ์ ์๊ฒ ํ ์๋ ์์ต๋๋ค. ์ด๋ค shell์ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ง๋ง, ๋ณดํต export CFLAGS="-Wall"๋ก ํ๊ฒฝ๋ณ์ ์ค์ ์ด ๋ ๊ฒ๋๋ค. ๋ฐ๋๋ก ํ๋ก๊ทธ๋จ ์คํ ์์๋ง ํด๋น modifiers๋ฅผ ๋ฃ์ด์ฃผ๊ณ ์ ํ๋ค๋ฉด, ์คํํ๊ณ ์ ํ๋ ๋ช
๋ น์ด ์์ ๋ถ์ฌ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ CFLAGS="-Wall" make ex1์ผ๋ก make๊ฐ .c๋ฅผ ๋น๋ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ cc์๊ฒ -Wall์ต์
์ ๋๊ฒจ์ฃผ์์ต๋๋ค. ์ด ์ต์
์ ๋ชจ๋ warning์ ๋ณผ ์ ์๊ฒ ํด์ค๋๋ค.ย
๊ฐ๋ณ๊ฒ make ์ปค๋งจ๋๋ง ์ฌ์ฉํ ์๋ ์์ง๋ง Makefile์ ๋ง๋ค์ด์ make์ ๋ํด ์ข ๋ ์์๋ณด๋๋ก ํ์ฃ . ์๋ ๋ด์ฉ์ด ๋ค์ด๊ฐ ํ์ผ๋ถํฐ ๋ง๋ค์ด๋ด
์๋ค.
CFLAGS=-Wall -g clean: rm -f ex1
์ด๊ฑธย ํ์ฌ ๋๋ ํ ๋ฆฌ์ย Makefile์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํด๋ณด์ฃ . Make๋ Makefile์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ์ผ์ ์์์ ์ฐพ์์ ์คํ์ํต๋๋ค. ๊ทธ๋ฆฌ๊ณ ..TABํค๋ง ์ฌ์ฉํ์ธ์. ๊ทธ๋ฅ ๊ณต๋ฐฑ์ ์๋ฉ๋๋ค.
์์ Makefile์์ ์ฐ๋ฆฐ ๋ช๊ฐ์ง๋ฅผ ์๊ฐํด๋ณผ ์ ์์ต๋๋ค. ๋จผ์ CFLAGS๋ฅผ ์ค์ ํ๊ธฐ ๋๋ฌธ์ ๋ค์ ์ค์ ํด์ฃผ์ง ์์๋ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ -g ์ต์
์ ํ์ฉํด์ ๋๋ฒ๊น
๊ฐ๋ฅํ๊ฒ๋ ํ์ฃ . ๊ทธ๋ฆฌ๊ณ clean์ด๋ผ๋ ์น์
์ ๋ง๋ค์ด์ ์ฐ๋ฆฌ์ ์์ ํ๋ก์ ํธ๋ฅผ ์ด๋ป๊ฒ cleanํ ๊ฒ์ธ์ง ์๋ ค์ฃผ์์ต๋๋ค.
๋ฐ๋์ ex1.c๊ฐ ์๋ ๋๋ ํ ๋ฆฌ์ ๋ง๋ค๊ณ ๋ค์์ ์คํํด๋ด
์๋ค.
๋น์ ์ ์ด๊ฒ์ ๋ณผ ์ ์์ด์ผ ํฉ๋๋ค
๋ง์ฝ ์ ๋๋ก ๋์ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ณด์ผ ๊ฒ๋๋ค.
$ make clean rm -f ex1 $ make ex1 cc -Wall -g ex1.c -o ex1 ex1.c: In function 'main': ex1.c:3: warning: implicit declaration of function 'puts' $
์ฌ๊ธฐ์ make clean ๋ช
๋ น์ด๋ ์ฐ๋ฆฌ๊ฐ clean ์น์
์ ์ ์ด๋ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค. Makefile์ ๋ค์ ์ด์ด๋ณด๋ฉด, ํด๋น ์น์
์ ์ ๊ฐ ์คํํ๊ณ ์ถ์ ์ ์ปค๋งจ๋๋ค์ด ๋์ด๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. make๋ ์ฟจํ ์๋ํ ๋๊ตฌ์์. ์คํ์ํค๊ณ ์ถ์ ๊ฒ๋ค, ๋ค ๋ฃ์ด๋ณด์ธ์.
๋ง์ฝ์ย ex1.cย ์ ๊ณ ์ณ์ย #include <stdio.h>ย ๋ฅผ ์ถ๊ฐํ๋ค๋ฉด ์ถ๋ ฅ ํ๋ฉด์ warning์ ์์ ๊ฒ๋๋ค. (๋ง์ฝ ์๋ค๋ฉด ๊ทธ๊ฑด ๊ทธ๋ฅ ์ง์ง ์๋ฌ์ผ๊ฒ๋๋ค.) ์์ ๊ฒฐ๊ณผ๋ ์์ ํ์ง ์์ ํ๋ฉด์ด๋ ์ฐธ๊ณ ํ์ธ์.
๊ทธ๋ฆฌ๊ณ .. ex1์ด๋ผ๊ณ Makefile์ ๋ช
์ํ์ง ์์๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํ์ธ์. ๊ทธ๋๋ make๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ค์ ๋๋ก ๋น๋ํด์ค๋๋ค.
์, ์ด์ ์์ํ๊ธฐ์ ์ถฉ๋ถํ ๊ฒ ๊ฐ๊ตฐ์. ๊ทธ๋๋ ๋ช๊ฐ์ง break์ ํตํด์ make file์ ์ด๋ค ์ผ์ด ์๊ธฐ๋์ง ์์๋ด
์๋ค. rm -f ex1์ ์ธ๋ดํธ๋ฅผ ์์ ๋ณผ๊น์?(๋งจ ์์ผ๋ก ๋น๊ฒจ๋ณด์ฃ ) ๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ๋๋์? make clean์ ์คํํ๋ฉด ์๋ง ์ด๋ ๊ฒ ๋ณด์ผ๊ฒ๋๋ค.
$ make clean Makefile:4: *** missing separator. Stop.
indent์ ์ ์ํ์ธ์. ๋ง์ฝ ์ด์ํ ์๋ฌ๋ฅผ ๋ง๋๋ค๋ฉด ์ ๋ง 'tab'๋ง ์ฌ์ฉํ๋์ง ๋ค์ ํ ๋ฒ ํ์ธํด๋ณด์ธ์.
all ์น์
์ ๋ง๋ค์ด ๋ด
์๋ค.: make๋ฅผ ํ์ฉํ๋ฉด ex1 ํ๊ฒ์ ๊ทธ์ ex1๋ง ๋ง๋ค๊ฒ ์ฃ .
man make๋ฅผ ์ฝ๊ณ ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์ง ๋ ์ฐพ์๋ด
์๋ค.
man cc๋ฅผ ์ฝ๊ณ -Wall๊ณผ -g ํ๋๊ทธ๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์ฐพ์๋ด
์๋ค.
Makefiles๋ฅผ ์ฐพ์๋ณด๊ณ ์ด๋ป๊ฒ ์
๊ทธ๋ ์ด๋ ํ ์ ์์์ง ์๊ฐํด๋ด
์๋ค.
๋ค๋ฅธ Cํ๋ก์ ํธ์์ Makefile์ ์ฐพ๊ณ ์ด๊ฒ์ด ์ด๋ค ์ผ์ ํ๋์ง ์ดํดํด๋ด
์๋ค.