๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/C++ ๊ธฐ์ดˆ

Makefile ๊ธฐ์ดˆ

by ์„œ์•„๋ž‘๐Ÿ˜ 2023. 4. 11.

 

โœ… ๊ธฐ๋ณธ

 
makefile ์—†์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํŒŒ์ผ ํ•˜๊ฒŒ ๋ ๋•Œ๋Š” gcc/g++๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.
 
  • gcc -c main.c usa.c kor.c
  • gcc -o app.out main.o usa.o kor.o
 
์—ฌ๊ธฐ์„œ ๋˜‘๋˜‘ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋ฆฌ๋ˆ…์Šค๋Š”
 
  • gcc -o app.out main.c usa.c kor.c
 
๋ฅผ ํ†ตํ•ด ์œ„ ๋‘๊ณผ์ •์„ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
 
 
 

โœ… Makefile ๋งŒ๋“ค๊ธฐ

 
TARGET : DEPENDENCY
    command
 
 
  • TARGET์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” DEPENDENCY๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • command ๋ช…๋ น์„ ํ†ตํ•ด TARGET์„ ๋งŒ๋“ ๋‹ค.
 
 
โœ”๏ธ ex1) ๊ธฐ๋ณธ์ ์ธ Makefile ์ฒซ ๊ตฌ์„ฑ (main.c kor.c usa.c → app.out)
 
app.out : main.o kor.o usa.o
    gcc -o app.out main.o kor.o usa.o
 
main.o :
    gcc -c main.c
 
kor.o :
    gcc -c kor.c
 
usa.o :
    gcc -c usa.c
 
 
 
 
โœ”๏ธ ex2) all์˜ ๊ฐœ๋…(๊ฒฐ๊ตญ ๋„ˆ๊ฐ€ ๋งŒ๋“ค๊ณ  ์‹ถ์€๊ฒŒ ๋ญ๋ƒ, all์ด ์—†์œผ๋ฉด ๊ฐ€์žฅ ์ฒ˜์Œ์˜ ๋ช…๋ น๋งŒ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์ฆ‰ app.out : XXXX์ด ๊ฐ€์žฅ ๋ฐ‘์— ์žˆ๋Š” ๊ฒฝ์šฐ main.o : ๋งŒ ์‹คํ–‰์‹œํ‚ฌ ๊ฒƒ์ด๋‹ค)
        ๋”ฐ๋ผ์„œ all์„ ์จ์ค€๋‹ค.(make ๋ช…๋ น์–ด๋กœ ์‹คํ–‰์‹œํ‚ค๋ฉด Makefile์˜ all์„ ๊ฐ€์žฅ ๋จผ์ € ์ฐพ์•„๊ฐ„๋‹ค.)
 
all : app.out
 
app.out : main.o kor.o usa.o
    gcc -o app.out main.o kor.o usa.o
 
main.o :
    gcc -c main.c
 
kor.o :
    gcc -c kor.c
 
usa.o :
    gcc -c usa.c
 
 
 
 
โœ”๏ธ ex3) ๋ณ€์ˆ˜ ์‚ฌ์šฉ
 
CC = gcc
TARGET = app.out
OBJS = main.o kor.o usa.o
 
all : $(TARGET)
 
$(TARGET) : $(OBJS)
    $(CC) -o $(TARGET) $(OBJS)
 
main.o :
    $(CC) -c main.c
 
kor.o :
    $(CC) -c kor.c
 
usa.o :
    $(CC) -c usa.c
 
 
 
 
โœ”๏ธ ex4)์ง€์ •์ž ์‚ฌ์šฉ( $@: Target์„ ์˜๋ฏธ, $^: Dependency๋ฅผ ์˜๋ฏธ - ์•„๋ž˜ ์˜ˆ์ œ์—์„œ $^๋Š” $OBJ๋ฅผ ๋œปํ•จ)
        (.c.o๋Š” Makefile์ด ์œ„์น˜ํ•œ ๊ณต๊ฐ„์˜ cํŒŒ์ผ์„ ๋ชจ๋‘ objectํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•˜๊ฒ ๋‹ค ๋ผ๋Š” ์˜๋ฏธ)
        ($(CC) -o $@ $< ๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ๋œ cํŒŒ์ผ์— ๋Œ€ํ•ด์„œ gcc -o app.out๋ฅผ ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค ๋ผ๋Š” ์˜๋ฏธ -> main.o : / kor.o / usa.o ๋Š” ์—†์–ด๋„ ๋จ)
 
 
CC = gcc
TARGET = app.out
OBJS = main.o kor.o usa.o
 
all : $(TARGET)
 
$(TARGET) : $(OBJS)
    $(CC) -o $@ $^
 
.c.o:
    $(CC) -c -o $@ $<
 
 
 
 
โœ”๏ธ ex5) CFLAGS์™€ LDFLAGS ์‚ฌ์šฉ
        (CFLAGS๋Š” ์ปดํŒŒ์ผ ์˜ต์…˜์ด๋‹ค.  -Wall -g -o ๋Š” ๋ชจ๋“  warning์„ ๋ณด๊ฒ ๋‹ค, ๋””๋ฒ„๊น… ์˜ต์…˜, ์ตœ์ ํ™” ์˜ต์…˜ )
        (LDFLAGS๋Š” ๋งํฌ ์˜ต์…˜์ด๋‹ค. ๋ณดํ†ต ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง€์ •ํ•œ๋‹ค. -lopenssl ์€ openssl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๊ฒ ๋‹ค)
 
 
CC = gcc
TARGET = app.out
OBJS = main.o kor.o usa.o
 
CFLAGS = -Wall -g -o
LDFLAGS = -lopenssl
 
all : $(TARGET)
 
$(TARGET) : $(OBJS)
    $(CC) $(LDFLAGS) -o $@ $^
 
.c.o :
    $(CC) $(CFLAGS) -c -o $@ $<
 
 
 
 
โœ”๏ธ ex6) ๋งˆ๋ฌด๋ฆฌ(clean → make clean ์ธ์ž๋ฅผ ์ค˜์„œ ๋ชฉ์ ํŒŒ์ผ๊ณผ ํƒ€๊ฒŸํŒŒ์ผ์„ ์ง€์›€, ๋ฆฌ๋นŒ๋“œ ๋ชฉ์ )
 
 
CC = gcc
TARGET = app.out
OBJS = main.o kor.o usa.o
 
CFLAGS = -Wall -g
LDFLAGS = -lopenssl
 
all : $(TARGET)
 
$(TARGET) : $(OBJS)
    $(CC) $(LDFLAGS) -o $@ $^
 
.c.o:
    $(CC) $(CFLAGS) -c -o $@ $<
 
clean :
    rm -f $(OBJS) $(TARGET)
 
 
 
 
์ถœ์ฒ˜: ์‹œ๊ณจ์‚ฌ๋Š” ๊ฐœ๋ฐœ์ž

 

๋Œ“๊ธ€