Makefile - 3. Makefile의 기능 확장 (3-2. 포함 파일 (Include))
2025. 3. 11. 19:06ㆍ개발/개발도구와 환경
📌 3-2. 포함 파일 (Include)
Makefile에서 포함 파일(Include)을 사용하면 외부 설정 파일을 불러와 Makefile을 더 효율적으로 관리할 수 있습니다.
이를 활용하면 설정값을 분리하여 유지보수성을 향상시킬 수 있으며, 다중 Makefile을 관리하는 구조를 구축할 수도 있습니다.
1. 포함 파일(Include)이란?
📌 1-1. 포함 파일(Include)의 개념
- Makefile에서 include 키워드를 사용하여 외부 설정 파일을 불러올 수 있음.
- 설정 파일을 분리하여 관리하면 Makefile의 가독성이 높아지고 유지보수가 쉬워짐.
- 프로젝트가 커질수록 다중 Makefile을 관리하는 구조가 필요해짐.
2. include config.mk로 외부 설정 파일 불러오기
📌 2-1. include 키워드 사용법
- include 키워드를 사용하여 외부 파일을 불러옵니다.
- 설정 파일을 별도로 분리하여, Makefile을 더 깔끔하게 유지할 수 있습니다.
include config.mk
➡ config.mk 파일을 불러와서 해당 파일 내의 변수 및 설정을 적용.
📌 2-2. config.mk를 활용한 예제
🔹 프로젝트 구조
project/
├── src/
│ ├── main.c
│ ├── utils.c
│ ├── utils.h
├── config.mk
├── Makefile
🔹 config.mk (설정 파일)
CC = gcc
CFLAGS = -Wall -g
SRC = src/main.c src/utils.c
OBJS = $(SRC:.c=.o)
TARGET = myprogram
➡ CC, CFLAGS, SRC, OBJS, TARGET 등의 변수를 선언.
🔹 Makefile
include config.mk
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
✅ 이점
- config.mk에 컴파일러 옵션과 파일 목록을 정의하여 설정을 한 곳에서 쉽게 관리할 수 있음.
- 새로운 .c 파일을 추가할 때 Makefile이 아니라 config.mk만 수정하면 됨.
📌 2-3. include 사용 시 주의할 점
- include할 파일이 없을 경우 make 실행이 실패할 수 있음.
- 이를 방지하기 위해 -include(또는 .include in BSD) 키워드를 사용하면, 파일이 없어도 오류 없이 진행됨.
-include config.mk
➡ config.mk가 없을 경우에도 make 실행이 중단되지 않음.
3. 다중 Makefile 관리
📌 3-1. 다중 Makefile이 필요한 이유
- 대규모 프로젝트에서는 단일 Makefile이 너무 커지고 관리가 어려워질 수 있음.
- 여러 개의 Makefile을 사용하여 각 디렉토리별 빌드를 관리하는 것이 일반적임.
📌 3-2. make -C를 활용한 다중 Makefile 관리
- make -C 옵션을 사용하면 하위 디렉토리의 Makefile을 실행할 수 있음.
- 이를 통해 각 모듈별로 독립적인 Makefile을 관리할 수 있음.
🔹 프로젝트 구조
project/
├── src/
│ ├── main.c
│ ├── utils.c
│ ├── Makefile
├── lib/
│ ├── math.c
│ ├── Makefile
├── Makefile (최상위 Makefile)
🔹 project/src/Makefile
CC = gcc
CFLAGS = -Wall -g
SRC = main.c utils.c
OBJS = $(SRC:.c=.o)
all: $(OBJS)
$(CC) $(CFLAGS) -c $^
clean:
rm -f $(OBJS)
🔹 project/lib/Makefile
CC = gcc
CFLAGS = -Wall -g
SRC = math.c
OBJS = $(SRC:.c=.o)
all: $(OBJS)
$(CC) $(CFLAGS) -c $^
clean:
rm -f $(OBJS)
🔹 project/Makefile (최상위 Makefile)
all:
$(MAKE) -C src
$(MAKE) -C lib
clean:
$(MAKE) -C src clean
$(MAKE) -C lib clean
✅ 이점
- $(MAKE) -C src를 사용하여 하위 디렉토리의 Makefile을 실행할 수 있음.
- clean 명령어도 각 디렉토리별로 실행 가능함.
- 모듈화된 프로젝트 관리가 가능하여 유지보수가 쉬워짐.
4. include와 make -C를 함께 활용한 프로젝트 관리
대규모 프로젝트에서는 설정 파일을 포함하는 include 기능과, 서브 디렉토리를 관리하는 make -C를 함께 사용하면 효율적인 Makefile을 만들 수 있습니다.
🔹 예제: 최적화된 다중 Makefile 관리
include config.mk
all:
$(MAKE) -C src
$(MAKE) -C lib
clean:
$(MAKE) -C src clean
$(MAKE) -C lib clean
✅ 이점
- 설정 값(config.mk)을 포함하여 한 곳에서 관리 가능.
- 하위 디렉토리의 빌드를 make -C를 사용해 독립적으로 실행 가능.
- 유지보수성이 뛰어나고, 각 모듈을 개별적으로 빌드 가능.
📌 3-2. 포함 파일(Include) 요약 정리
개념 | 설명 |
include 사용 | 외부 설정 파일을 Makefile에 포함 |
설정 파일 분리 | config.mk 같은 파일을 사용하여 설정값을 분리 |
make -C 활용 | 하위 디렉토리의 Makefile을 실행 |
다중 Makefile 관리 | 대규모 프로젝트에서 모듈별 Makefile을 유지 |