[Make] Makefile 기본 개념
2024. 11. 21. 01:44
1. 주요 키워드
(1) all
Makefile의 기본 목표(target)입니다.
Makefile을 실행할 때 make만 입력하면 기본적으로 all 규칙이 실행됩니다.
일반적으로 전체 빌드 프로세스를 정의하는 데 사용됩니다.
all: program
(2) clean
빌드 디렉토리에서 생성된 파일(예: 객체 파일, 실행 파일 등)을 삭제합니다.
일반적으로 빌드 환경을 초기화하는 데 사용됩니다.
clean:
rm -f *.o program
(3) install
빌드된 프로그램이나 파일을 시스템의 특정 위치(예: /usr/local/bin)에 설치합니다.
install:
cp program /usr/local/bin
(4) test
테스트 프로그램을 실행하는 데 사용됩니다.
단위 테스트, 통합 테스트 등을 자동화할 때 유용합니다.
test:
./run_tests
(5) PHONY
PHONY는 실제 파일 이름과 충돌하지 않도록 특정 타겟을 가상 타겟으로 정의합니다.
clean, all, install과 같은 타겟은 일반적으로 PHONY로 선언됩니다.
.PHONY: all clean install
2. Makefile의 주요 구성 요소
(1) 변수 (Variables)
변수는 값을 재사용하거나 유지 관리하기 쉽게 합니다.
변수는 = 또는 :=로 정의합니다.
CC = g++
CFLAGS = -Wall -Wextra -g
program: main.o
$(CC) $(CFLAGS) main.o -o program
변수 사용 시에는 $(변수명) 형식으로 참조합니다.
(2) 타겟 (Targets)
빌드 대상입니다. 파일 이름이나 가상 타겟 이름(예: all, clean)으로 지정됩니다.
규칙의 왼쪽에 위치하며, Makefile의 실행 단위가 됩니다.
target: dependencies
commands
예시)
program: main.o utils.o
g++ main.o utils.o -o program
(3) 종속성 (Dependencies)
타겟을 빌드하는 데 필요한 파일이나 타겟입니다.
종속성이 변경되었을 때 타겟이 재빌드됩니다.
program: main.o utils.o
(4) 명령 (Commands)
종속성을 만족시킨 후 실행되는 실제 명령어입니다.
반드시 **탭(tab)**으로 시작해야 합니다.
main.o: main.cpp
g++ -c main.cpp -o main.o
3. Makefile의 기본 동작
(1) 규칙 기반 빌드
타겟을 만들기 위해 종속성을 확인하고, 필요한 경우 명령을 실행합니다.
program: main.o utils.o
g++ main.o utils.o -o program
(2) 내장 규칙 (Implicit Rules)
Makefile은 컴파일 명령을 자동으로 추론합니다.
예: .cpp 파일을 .o로 컴파일
main.o: main.cpp
이 규칙은 컴파일러 g++를 자동으로 사용하여 빌드합니다.
(3) 변수 자동화
Makefile은 내장된 변수들을 제공합니다:
$@: 타겟 이름
$<: 첫 번째 종속성
$^: 모든 종속성
main.o: main.cpp
g++ -c $< -o $@
4. 주요 내장 변수
(1) CC
컴파일러를 지정합니다. 기본값은 cc입니다.
예: CC = gcc
(2) CFLAGS
컴파일러 옵션을 지정합니다.
예: CFLAGS = -Wall -g
(3) LDFLAGS
링커 옵션을 지정합니다.
예: LDFLAGS = -lm
(4) MAKE
현재 실행 중인 Make 명령을 나타냅니다.
subdir:
$(MAKE) -C subdir
5. 간단한 Makefile 예제
(1) 소스 코드 컴파일
CC = g++
CFLAGS = -Wall -Wextra -g
SRC = main.cpp utils.cpp
OBJ = $(SRC:.cpp=.o)
TARGET = program
all: $(TARGET)
$(TARGET): $(OBJ)
$(CC) $(CFLAGS) $^ -o $@
%.o: %.cpp
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(OBJ) $(TARGET)
.PHONY: all clean
(2) 실행
make # 프로그램 빌드
make clean # 빌드 결과물 삭제
'Build > Make' 카테고리의 다른 글
[Make] Makefile에서 내장 변수 $@, $<, $^ 의 의미 (0) | 2024.11.21 |
---|---|
Makefile (MK 파일) 기본 문법 - 1 (0) | 2022.04.27 |