[Makefile] Makefile ๊ตฌ์กฐ์™€ rule

2025. 5. 29. 05:45ยท๐Ÿƒ‍โ™€๏ธ Activities/42 Cursus

๐Ÿ“Œ 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
'๐Ÿƒ‍โ™€๏ธ Activities/42 Cursus' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Makefile] %
  • [Makefile] make & make all ์ฐจ์ด
  • [ํ—ค๋”ํŒŒ์ผ(.h)] ํ—ค๋”๊ฐ€๋“œ
  • [GitHub] Git ์ €์žฅ์†Œ ์ƒ์„ฑ / ์›๊ฒฉ ์ €์žฅ์†Œ ์—ฐ๊ฒฐ / ์›๊ฒฉ ์ €์žฅ์†Œ ์ฃผ์†Œ ๋ณ€๊ฒฝ / Git ํ•ด์ œ
0=2.
0=2.
  • 0=2.
    0=2
    0=2.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (65)
      • ๐Ÿ“‚ Project (2)
        • Paint the City (2)
      • ๐Ÿ’ญ Problem Solving (28)
        • C++ (28)
      • ๐Ÿ“ Study (1)
        • React (1)
      • ๐Ÿ’ป CS (2)
        • ๐Ÿ“˜ Dev Book (2)
      • ๐Ÿƒ‍โ™€๏ธ Activities (32)
        • Web Front-End Basic Study (6)
        • 42 Cursus (26)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    react
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์‹œ๋ฎฌ๋ ˆ์ด์…˜
    CS
    knapsack
    ๊ตฌํ˜„
    ๋ฐฑ์ค€
    .h
    makefile
    dynamic programming
    BFS
    42๊ฒฝ์‚ฐ
    CSS
    unity
    La Piscine
    ๋งต
    git
    VR
    C
    HTML
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    swea
    github
    ์ •๋ ฌ
    JavaScript
    ๋ฐฑํŠธ๋ž˜ํ‚น
    dfs
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
0=2.
[Makefile] Makefile ๊ตฌ์กฐ์™€ rule
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”