์๋์ฐ์์๋ ๋น์ฅฌ์ผ ์คํ๋์ค๋ฑ์ ์ฌ์ฉํ์ฌ ๋ฒํผ์ ๋๋ฌ ์ปดํ์ผํ์ง๋ง, ๋ฆฌ๋
์ค ํ๊ฒฝ์์ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผ ํ ๋ make๋ผ๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ค.
1. makefile ์ด๋?
Shell์์ ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ค ํ๋์ด๋ค.
makefile์ด๋ผ๋ ํ์ผ์, ์ด๋ค ํ์ผ์ ์ปดํ์ผ ํ๋์ง, ์ด๋ ํ ๋ฐฉ์์ผ๋ก ์ปดํ์ผ ํ ์ง ์์ฑํด๋๋๋ค. ๊ทธ๋ฆฌ๊ณ make๋ผ๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด makefile ์ด ๋ค์ด์๋ ๋๋ ํ ๋ฆฌ์์ ํ์ผ๋ค์ ์ข
์๊ด๊ณ๋ฅผ ํ์
ํ์ฌ ์๋์ ์ผ๋ก ์ปดํ์ผํ๊ฒ ๋๋ค.
์ฆ, makefile๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผ ํ๋ฉด ์ฌ๋ฌ๊ฐ์ ํ์ผ์ ์ปดํ์ผํ ๋, ์๋ํ๋ก ์ธํด ์๊ฐ์ ์ ์ฝํ๊ณ , ํ๋ก๊ทธ๋จ์ ์ข
์ ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ํ์
ํ ์ ์๋ค. + ๋ง์ฝ ํ๋ก๊ทธ๋จ์ ์ผ๋ถ ์์ ํ๋ค๋ฉด, ๊ทธ ๋ถ๋ถ์ ๋ํด์๋ง ์ปดํ์ผ ํ๋๋ก ๋์์ฃผ๊ธฐ ๋๋ฌธ์ ํจ์ฌ ํจ์จ์ ์ด๋ค.
2. gcc๋ฅผ ์ฌ์ฉํ ๋ ์ปดํ์ผ์ ์์ (make์ ์ฌ์ฉํ์ง ์์์๋ ํ๋ก๊ทธ๋จ์ ๋น๋ ์ ์ฐจ)
์ผ๋ฐ์ ์ผ๋ก gcc , g++, clang ๋ฑ์ ์ฌ์ฉํ์ฌ ์ปดํ์ผ ํ ๋์ ์์๋ ์๋์ ๊ฐ๋ค.
๋ง์ฝ์ ๋๋ ํ ๋ฆฌ ๋ด์ ์๋์ ๊ฐ์ด ํ๋ก๊ทธ๋จ ํ์ผ๋ค์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด,
ํ์ผ์ ๋ค ์์ฑํ์ผ๋ฉด, ์ปดํ์ผ ํ์ฌ ์ค๋ธ์ ํธ ํ์ผ์ ์์ฑํด์ผ ํ๋ค. (ํค๋ํ์ผ๋ค์ main.c ํ์ผ์์ ๋ช
์๋์ด ์์ผ๋ฏ๋ก, ๋ฐ๋ก ์ปดํ์ผ ํ ๋ ํฌํจ์ํค์ง ์์๋ ๋๋ค.)
๊ทธ๋ผ ์๋์ ๊ฐ์ ์ค๋ธ์ ํธํ์ผ๋ค์ด ์์ฑ๋๋ค.
๋ค์์ผ๋ก๋ ์ ๋ช
๋ น์ด๋ฅผ ํตํด์ ์ค๋ธ์ ํธํ์ผ๋ค์ ํ๋๋ก ์ฐ๊ฒฐ์ํจ ์คํํ์ผ์ ์์ฑํ๋ค. ์ด ๊ณผ์ ์ "๋งํน"์ด๋ผ๊ณ ๋งํ๋ค.
๋ฐ๋ก ํ์ผ๋ช
์ ์ง์ ํ์ง ์์ผ๋ฉด a.out์ด๋ผ๋ ํ์ผ๋ก ์์ฑ๋๋ค.
์ด๋ ๊ฒ ์คํํด์ฃผ๋ฉด ๋๋ค.
3. Makefile ์ ์ฌ์ฉํ์ฌ ๋น๋ํ๊ธฐ
makefile์ 3๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋๋ค.
- Target (ํ๊ฒ)
- Prerequisites (ํ์ํ ์กฐ๊ฑด๋ค) || ํน์ Dependency : Target์ด ์์กดํ๋ ํ์ผ๋ค
- Recipes (์คํํ ๋ช
๋ น์ด) || ํน์ Command (๋ช
๋ น์ด)
๊ทธ๋ผ ๋ชฉ์ฐจ 2๋ฒ์์ ํ๋ ๋น๋๊ณผ์ ์ผ๋ก ์๋ฅผ๋ค์ด์ makefile์ ๋ง๋ค์ด ๋ณด๋ฉด
makefile
๋ค์ฌ์ฐ๊ธฐ๋ ๋ฐ๋์ tab์ผ๋ก ํด์ผํ๋ค.
make ๋ช
๋ น์ ํตํด ๋น๋ํ๋ฉด 2๋ฒ์์ ํ๋ ๊ณผ์ ๋ค(์ปดํ์ผ + ๋งํน)์ด ๊ทธ๋๋ก ๋น๋๋๋ค.
3 - 1 . makefile ๋ด์์ ๋ณ์ ์ ์ํ๊ธฐ
๋ณ์๋ ์์ ๊ฐ์ด ์ค์ ํ๋ค. ์ฌ์ฉํ ๋๋ $(๋ณ์๋ช
) ์ผ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
4 - 2 . PHONY
makefile ๋ด์ ํํ๊ฒ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ผ๋ก clean์ด ์๋ค. clean์ ๋น๋์ ๊ด๋ จ๋ ํ์ผ๋ค (์ค๋ธ์ ํธ ํ์ผ)์ ๋ชจ๋ ์ ๊ฑฐํ๋ ๋ช
๋ น์ ๋ฃ๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก make clean ์ด๋ผ๊ณ ์
๋ ฅํ์ฌ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, clean์ด๋ผ๋ ํ์ผ์ด ๋๋ ํ ๋ฆฌ๋ด์ ์กด์ฌํ ๊ฒฝ์ฐ์๋ ๋ช
๋ น์ด ๋ฌด์๋์ด๋ฒ๋ฆฐ๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ PHONY์ ๋ฑ๋กํ๋ค.
PHONY์ ๋ฑ๋ก๋ ๋ช
๋ น์ด๋, ๋์ผ ์ด๋ฆ์ ํ์ผ ์กด์ฌ์ฌ๋ถ๊ณผ ๊ด๊ณ ์์ด ํญ์ ํ๊ฒ ๋ช
๋ น์ ์คํํ๊ฒ ๋๋ค.
4 - 3. ํจํด ์ฌ์ฉ
ํ๋ก์ ํธ๊ฐ ๋ฐฉ๋ํด์ง๋ค๋ฉด, ์๋ํ๋ฅผ ํ๊ธฐ ์ํด makefile๋ด์ recipe์ ์์ฑํ ๋๋ ๋ง์ ์
๋ ฅ์ด ํ์ํ๋ค.(ํ์ผ๋ช
๋ง ๋ฐ๊พธ์ด ๋ฐ๋ณต์ ์ด๊ณ ๋นํจ์จ์ ์ธ ์์
) ์ด๋ฅผ ํธํ๊ฒ ํ๊ธฐ ์ํด์ ํจํด์ ์ฌ์ฉํ๊ฒ ๋๋ค.
* ํจํด์ target๊ณผ prerequisite ๋ถ๋ถ์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ recipe์์๋ "์๋ ๋ณ์"๋ผ๋ ๋ฏธ๋ฆฌ ์ ํด์ง ๋ณ์๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
* ์๋ ๋ณ์
- $@ : ํ๊ฒ ์ด๋ฆ์ ๋์๋๋ค. (ex : f1.o)
- $< : ์์กด ํ์ผ ๋ชฉ๋ก์ ์ฒซ ๋ฒ์งธ ํ์ผ์ ๋์๋๋ค. (ex : f1.c)
- $^ : ์์กด ํ์ผ ๋ชฉ๋ก ์ ์ฒด์ ๋์๋๋ค. (ex : f1.c , f1.h)
ํจํด์ ์ฌ์ฉํ๊ธฐ ์
ํจํด ์ฌ์ฉ ํ
%.o ๋ ์์ผ๋์นด๋์ ๋์์ํค๋ฉด *.o์ ๊ฐ๋ค. ํ์ฅ์๊ฐ o์ธ ๋ชจ๋ ํ์ผ์ ํ๊ฒ์ผ๋ก ์ผ๊ฒ ๋ค๋ ์๋ฏธ๊ฐ ๋๋ค.
* ์๋ prerequisite ์์ฑ
์ปดํ์ผ์ -MD์ต์
์ ์ฃผ๋ฉด, dํ์ฅ์๋ฅผ ๊ฐ์ง ํ์ผ์ด ์์ฑ๋๋ค. ์ด ํ์ผ์๋ ์๋์ ์ผ๋ก ๋ชฉ์ ํ์ผ๊ณผ ์ปดํ์ผํ ์์คํ์ผ์ ํ๊ฒ์ผ๋ก ์ผ๋ ์์กดํ์ผ๋ค์ ๋ด์ ๋ชฉ๋ก์ ๋ด๊ณ ์๋ค.
์ด๋ฌํ ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ makefile์์ ์๋์ ์ผ๋ก prerequisite๋ฅผ ์์ฑ ๊ฐ๋ฅํ๋ค.
OBJS์ oํ์ฅ์๋ฅผ ๊ฐ๋ ํ์ผ๋ค์ d๋ก ๋์ฒดํ๋ผ๋ ์๋ฏธ๊ฐ ๋๋ค.
์ฐธ์กฐ
modoocode.com/311
์น์ด๋จน๋ C++ - <19 - 1. Make ์ฌ์ฉ ๊ฐ์ด๋ (Makefile ๋ง๋ค๊ธฐ)>
modoocode.com