Makefile 작성법

민픽minpic·2023년 5월 6일
0

[TIL] Today I Learned

목록 보기
12/25

gcc 컴파일러 명령어로 매번 프로그램을 실행시킬 수 있지만,
매번 많은 양의 파일들을 직접 터미널에서 gcc 컴파일러 명령어로 칠 수 없을거다.

그래서 Makefile을 만들어서 프로그램을 작동 시킬 수 있도록 할 것이다.

$ tree
├── Makefile
├── README.md
├── obj
│   ├── main.o
│   ├── stack.o
│   └── test.o
├── src
│   ├── Makefile
│   ├── main
│   ├── main.c
│   ├── stack.c
│   ├── stack.h
│   └── test.c

gcc 컴파일러로 main 실행파일과, main.o, stack.o, test.o 이렇게 세가지 목적파일을 main.c, stack.c, test.c 파일을 이용해서 만들 수 있다.

Makefile

.PHONY: clean

# 목적파일을 따로 폴더에 넣어주기 위해 경로를 설정
OBJ_DIR = /home/ubuntu/minpic/rbtree-lab/obj

CC = gcc

# 목적파일의 경로를 찾을 수 있도록 설정
OBJS = $(OBJ_DIR)/stack.o $(OBJ_DIR)/test.o $(OBJ_DIR)/main.o

# 만들어낼 실행파일 이름
TARGET = main

$(TARGET) : $(OBJS)
	$(CC) $(OBJS) -o $(TARGET)

$(OBJ_DIR)stack.o : stack.c
	$(CC) -c -o $(OBJ_DIR)/stack.o stack.c
  
$(OBJ_DIR)test.o : test.c
	$(CC) -c -o $(OBJ_DIR)/test.o test.c
  
$(OBJ_DIR)main.o : main.c 
	$(CC) -c -o $(OBJ_DIR)/main.o main.c
  
clean : 
	rm $(OBJS) $(TARGET)

이렇게 만들 수 있다. 그런데 조금 더 간결하고 보기 좋게 작성도 가능하다.

OBJ_DIR = /home/ubuntu/minpic/rbtree-lab/obj
CC = gcc

# addprefix 함수로 각각의 목적파일의 경로를 OBJ_DIR에서 찾을수 있도록 
OBJS = $(addprefix $(OBJ_DIR)/, stack.o test.o main.o)

TARGET = main

$(TARGET): $(OBJS)
	$(CC) $(OBJS) -o $(TARGET)


$(OBJ_DIR)/%.o: %.c
	$(CC) -c -o $@ $<
profile
사진찍는 개발자 / 한 가지 개념이라도 깊이있게

0개의 댓글