Makefile - 2. Makefile의 기본 문법 (2-1. 변수 (Variables))
2025. 3. 11. 18:59ㆍ개발/개발도구와 환경
📌 2-1. 변수 (Variables)
Makefile에서 변수(Variable)는 빌드 과정에서 자주 사용되는 값(컴파일러, 플래그, 파일 목록 등)을 효율적으로 관리하는 데 사용됩니다.
변수를 활용하면 코드를 간결하게 유지하고, 유지보수성을 높일 수 있으며, 명령줄에서 쉽게 값을 변경할 수도 있습니다.
1. 변수를 사용하는 이유
📌 1-1. 변수 활용의 장점
✅ 코드의 가독성 향상
- 변수 없이 동일한 값이 여러 번 반복되면 유지보수하기 어려움.
- 변수를 사용하면 재사용성 증가 및 코드 간결화 가능.
✅ 유지보수 용이
- 특정 값을 변경해야 할 때, 한 곳에서 수정하면 전체에 적용됨.
- 예를 들어, 컴파일러를 gcc에서 clang으로 변경해야 한다면, 변수를 활용하면 쉽게 변경 가능.
✅ 플랫폼 독립적인 코드 작성 가능
- 시스템에 따라 다른 컴파일러, 플래그, 디렉토리를 설정할 수 있음.
- 예를 들어, Windows와 Linux에서 다른 컴파일 옵션을 적용할 수 있음.
✅ 빌드 과정의 유연성 증가
- 명령줄에서 변수를 재정의하여 특정 설정을 쉽게 변경할 수 있음.
- 예를 들어, make DEBUG=1을 실행하면 디버깅 옵션을 추가할 수도 있음.
2. 변수 정의 및 사용 방법
📌 2-1. 변수 정의
Makefile에서 변수는 다음과 같은 방식으로 정의됩니다.
변수이름 = 값
🔹 예제
CC = gcc
CFLAGS = -Wall -g
SRC = main.c utils.c
OBJS = main.o utils.o
TARGET = myprogram
- CC → 사용할 컴파일러 (gcc)
- CFLAGS → 컴파일 옵션 (-Wall -g)
- SRC → 소스 파일 목록 (main.c utils.c)
- OBJS → 오브젝트 파일 목록 (main.o utils.o)
- TARGET → 최종 실행 파일 (myprogram)
📌 2-2. 변수 사용
변수를 사용할 때는 $() 또는 ${}를 사용합니다.
$(변수이름)
또는
${변수이름}
🔹 예제
CC = gcc
CFLAGS = -Wall -g
SRC = main.c utils.c
OBJS = main.o utils.o
TARGET = myprogram
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $(TARGET) $(OBJS)
main.o: main.c
$(CC) $(CFLAGS) -c main.c
utils.o: utils.c
$(CC) $(CFLAGS) -c utils.c
clean:
rm -f $(OBJS) $(TARGET)
✅ 이점
- $(TARGET)을 사용하면 실행 파일 이름을 쉽게 변경할 수 있음.
- $(OBJS)를 사용하면 소스 코드가 추가되거나 삭제될 때 한 곳만 수정하면 됨.
3. 변수의 재정의 (명령줄에서 make VAR=value 사용)
📌 3-1. 기본적인 변수 재정의
Makefile에서 변수를 설정했더라도, 명령줄에서 값을 변경할 수 있음.
이는 빌드 옵션을 다르게 적용할 때 매우 유용합니다.
make CFLAGS=-O2
- CFLAGS의 기본값은 -Wall -g였지만, 실행 시 -O2로 변경됨.
🔹 Makefile 예제
CC = gcc
CFLAGS = -Wall -g
all:
$(CC) $(CFLAGS) -o myprogram main.c utils.c
make CFLAGS=-O3
➡ gcc -O3 -o myprogram main.c utils.c 실행됨.
📌 3-2. 환경 변수 활용
Makefile에서 ?= 연산자를 사용하면 환경 변수 값이 있는 경우 우선 적용할 수 있습니다.
CFLAGS ?= -Wall -g
export CFLAGS=-O2
make
➡ 환경 변수 CFLAGS=-O2가 적용됨.
📌 3-3. 변수 값의 추가 및 변경
- += 연산자를 사용하면 기존 값에 새로운 값을 추가할 수 있음.
🔹 예제
CFLAGS = -Wall
CFLAGS += -g
➡ CFLAGS 값은 -Wall -g가 됨.
make CFLAGS="-O2"
➡ CFLAGS 값이 -O2로 변경됨.
📌 2-1. 변수(Variables) 요약 정리
개념 | 설명 |
변수 정의 | 변수이름 = 값 형식으로 선언 |
변수 사용 | $(변수이름) 또는 ${변수이름} 사용 |
변수 재정의 | make VAR=value로 명령줄에서 변경 가능 |
환경 변수 적용 | ?=를 사용하면 환경 변수 값을 우선 적용 |
변수 값 추가 | += 연산자로 기존 값에 추가 가능 |
'개발 > 개발도구와 환경' 카테고리의 다른 글
Makefile - 2. Makefile의 기본 문법 (2-3. 패턴 규칙 (Pattern Rules)) (0) | 2025.03.11 |
---|---|
Makefile - 2. Makefile의 기본 문법 (2-2. 자동 변수 (Automatic Variables)) (0) | 2025.03.11 |
Makefile - 1. Makefile 기본 개념 (1-3. 기본적인 Makefile 구조) (0) | 2025.03.11 |
Makefile - 1. Makefile 기본 개념 (1-2. Makefile의 동작 방식) (0) | 2025.03.11 |
Makefile - 1. Makefile 기본 개념 (1-1. Makefile이란?) (0) | 2025.03.11 |