✅ 목표 (Goal)

Makefile을 만들어 보자.

✅ 가장 단순하게 만든경우

zoo: dog.c cat.c tiger.c
	gcc -o zoo dog.c cat.c tiger.c

✅ 좀더 그럴싸하게(?) 만든 경우

아래 코드는 위의 코드와 차이가 없다!

차이라고는 가독성이다.

하지만 가독성도 무시 못한다.

zoo: main.o dog.o cat.o tiger.o
    gcc -o zoo main.o dog.o cat.o tiger.o

main.o: main.c
    gcc -c main.c

dog.o: dog.c dog.h
    gcc -c dog.c

cat.o: cat.c cat.h
    gcc -c cat.c

tiger.o: tiger.c tiger.h
    gcc -c tiger.c

✅ 가장 효율적으로 만든 경우

문법을 배우고 나서 다시 보자.

# 컴파일러와 컴파일 옵션 정의
CC = gcc #사용할 컴파일 gcc
CFLAGS = -Wall -g

# 타겟 실행 파일
TARGET = zoo

# 소스 파일과 객체 파일
SRCS = main.c dog.c cat.c tiger.c
OBJS = main.o dog.o cat.o tiger.o

# 최종 실행 파일 생성 규칙
$(TARGET): $(OBJS)
    $(CC) -o $(TARGET) $(OBJS)

# 개별 소스 파일 -> 객체 파일 규칙
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

# clean 규칙 (빌드 파일 정리)
clean:
    rm -f $(OBJS) $(TARGET)