๐ Makefile ๊ตฌ์กฐ
target: dependencies
commands
- target: ๋ง๋ค๊ณ ์ ํ๋ ํ์ผ ์ด๋ฆ (๋ณดํต ์คํ ํ์ผ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ)
- dependencies: ํด๋น ํ๊ฒ์ ์์ฑํ๊ธฐ ์ํด ํ์ํ ํ์ผ๋ค (์์ค ํ์ผ, ํค๋ ํ์ผ ๋ฑ)
- commands: dependencies๋ฅผ ์ด์ฉํด target์ ๋ง๋๋ ๋ช
๋ น์ด
๋ช ๋ น์ด๋ ๋ฐ๋์ ํญ(tab)์ผ๋ก ์์ํด์ผ ํ๋ค. ์๋๋ฉดMakefile: missing separator
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๐ ar
ar(archiver)์ ์ฌ๋ฌ ์ค๋ธ์ ํธ ํ์ผ(.o)์ ๋ฌถ์ด์ ํ๋์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(.a) ํ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๋๊ตฌ์ด๋ค.
.a
ํ์ผ์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์คํ ํ์ผ์ ์ปดํ์ผํ ๋ ์ฝ๋๊ฐ ํ๋ก๊ทธ๋จ์ ์ง์ ํฌํจ๋๋ค.- ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋งํน ์์ ์ ์คํ ํ์ผ์ ๋ณํฉ๋์ด์, ๋ฐฐํฌ ์ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ด ํ์ํ์ง ์๋ค.
- ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ๋ค๋ฅด๊ฒ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(
.so
)๋ ํ๋ก๊ทธ๋จ ์คํ ์ ํ์ํ๋ค.
-rcs ์ต์
r
(replace): ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ผ์ด ์์ผ๋ฉด ๋ฎ์ด์ฐ๊ธฐ. ์์ผ๋ฉด ์๋ก ์ถ๊ฐ.c
(create): ์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ. ๋ง์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฏธ ์์ด๋ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ง ์๋๋ค.s
(index): ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ๋ฑ์ค ํ ์ด๋ธ ์์ฑ. ์ธ๋ฑ์ค๊ฐ ์์ด์ผ ์ปดํ์ผ๋ฌ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์์ ์ฌ๋ณผ(symbol)์ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
# file1.o, file2.o, file3.o ํ์ผ์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ libmylib.a๋ก ๋ฌถ๊ธฐ
ar rcs libmylib.a file1.o file2.o file3.o
libmylib.a
๋ผ๋ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง๊ณ , ๋งํนํ ๋ ์ฌ์ฉํ๋ค.
# main.c๋ฅผ libmylib.a์ ํจ๊ป ์ปดํ์ผ
gcc main.c -L. -lmylib -o myprogram
lmylib
๋ libmylib.a
๋ฅผ ๋งํฌํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
ar ์ธ๋ฑ์ค ํ์ธ ar -t
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ์ ์ด๋ค ํ์ผ๋ค์ด ๋ค์ด ์๋์ง ํ์ธํ๊ณ ์ถ๋ค๋ฉด ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
ar -t libmylib.a
์ถ๋ ฅ ์์
file1.o
file2.o
file3.o
๐ Makefile rules
1. all
all
์ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋ ํ๊ฒ์ด๋ค.
๋ณดํต make
๋ช
๋ น๋ง ์
๋ ฅํ๋ฉด all
์ด ์คํ๋๋ค. (make
= make all
)
์ญํ
ํ๋ก๊ทธ๋จ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(.a
๋ฑ)๋ฅผ ์ปดํ์ผํ๊ณ ์์ฑํ๋ค.
์์
all: $(NAME)
$(NAME)
์ .a
๊ฐ์ ์ต์ข
์์ฑ๋ฌผ์ ์๋ฏธํ๋ค.all
์ด ์คํ๋๋ฉด ์ค๋ธ์ ํธ ํ์ผ์ ๋ง๋ค์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
2. clean
clean
์ ์ปดํ์ผ ๊ณผ์ ์์ ์๊ธด ์ค๋ธ์ ํธ ํ์ผ(.o
)์ ์ญ์ ํ๋ ๊ท์น์ด๋ค.
์์ค ํ์ผ๊ณผ ์ต์ข
์์ฑ๋ฌผ์ ๋จ๊ฒจ๋๋ค.
์ญํ
์ค๊ฐ ์ฐ์ถ๋ฌผ์ธ .o
ํ์ผ๋ค์ ์ญ์ ํ๋ค.
์์
clean:
rm -f $(OBJ)
rm -f $(OBJ)
๋ ์ค๋ธ์ ํธ ํ์ผ(.o
)์ ์ญ์ ํ๋ค.$(OBJ)
๋ $(SRC:.c=.o)
๋ก .c
๋ฅผ .o
๋ก ๋ฐ๊พผ ๋ชฉ๋ก์ด๋ค.
3. fclean (full clean)
fclean
์ clean
์ด ํ๋ ์ผ์ ํฌํจํ๋ฉด์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ(.a
)๋ ์คํ ํ์ผ๋ ์ญ์ ํ๋ค.
๋ชจ๋ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ์์ ํ ์ ๊ฑฐํ ๋ ์ฌ์ฉํ๋ค.
์ญํ
์ค๋ธ์ ํธ ํ์ผ + ์ต์ข
๊ฒฐ๊ณผ๋ฌผ(.a
)์ ๋ชจ๋ ์ญ์ ํ๋ค.
์์
fclean: clean
rm -f $(NAME)
4. re (rebuild)
re
๋ fclean
ํ all
์ ๋ค์ ์คํํ๋ ๊ท์น์ด๋ค.
๋ชจ๋ ํ์ผ์ ์ง์ฐ๊ณ ์ฒ์๋ถํฐ ๋ค์ ๋น๋ํ ๋ ์ฌ์ฉํ๋ค.
์ญํ
์์ ํ ๋น๋ ๊ณผ์ ๋ฆฌ์
ํ ์ฌ์ปดํ์ผํ๋ค.
์์
re: fclean all
make re
๋ฅผ ์คํํ๋ฉด fclean
์ผ๋ก ๋ชจ๋ ํ์ผ์ ์ญ์ ํ๊ณ , all
์ ๋ค์ ์คํํด์ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋น๋ํ๋ค.
Rule | ์ค๋ช | ์ญ์ ๋์ | ์ต์ข ์์ฑ |
---|---|---|---|
all |
ํ๋ก์ ํธ ๋น๋ | ์์ | O |
clean |
์ค๋ธ์ ํธ ํ์ผ ์ญ์ | .o ํ์ผ |
X |
fclean |
๋ชจ๋ ๋น๋ ์ฐ์ถ๋ฌผ ์ญ์ | .o + ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ |
X |
re |
๋ชจ๋ ํ์ผ ์ญ์ ํ ์ฌ์ปดํ์ผ | .o , ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
O |
'๐โโ๏ธ Activities > 42 Cursus' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Makefile] SRC / OBJ / NAME (0) | 2025.05.30 |
---|---|
[Makefile] % (0) | 2025.05.30 |
[Makefile] make & make all ์ฐจ์ด (0) | 2025.05.30 |
[ํค๋ํ์ผ(.h)] ํค๋๊ฐ๋ (0) | 2025.05.29 |
[GitHub] Git ์ ์ฅ์ ์์ฑ / ์๊ฒฉ ์ ์ฅ์ ์ฐ๊ฒฐ / ์๊ฒฉ ์ ์ฅ์ ์ฃผ์ ๋ณ๊ฒฝ / Git ํด์ (0) | 2025.05.29 |