Docker / / 2024. 12. 3. 16:03

Makefile

Makefile이란?

Makefile자동화된 빌드 시스템을 위한 파일로, C/C++ 같은 언어로 작성된 프로그램을 컴파일하거나 프로젝트 작업을 자동화하는 데 사용됩니다.
GNU Make와 함께 사용되며, 명령어와 종속성 규칙을 정의하여 빌드 과정을 효율적으로 관리합니다.


1. Makefile의 주요 개념

1.1 타겟(Target)

  • 빌드 프로세스의 출력물 또는 실행 가능한 작업의 이름.
  • 예: 실행 파일, 객체 파일, 특정 작업.

1.2 종속성(Dependency)

  • 타겟을 생성하기 위해 필요한 파일이나 작업.

1.3 명령어(Command)

  • 타겟을 생성하기 위해 실행되는 쉘 명령어.

2. Makefile의 기본 구조

타겟: 종속성
    명령어

예제

all: hello

hello: hello.o
    gcc -o hello hello.o

hello.o: hello.c
    gcc -c hello.c

clean:
    rm -f hello hello.o

실행 명령어

make all  # 기본 타겟 실행
make clean  # 빌드된 파일 삭제

3. Makefile의 주요 기능

3.1 변수 사용

변수를 사용하여 코드 중복을 줄이고 유지보수성을 높임.

CC = gcc
CFLAGS = -Wall

all: main.o
    $(CC) $(CFLAGS) -o main main.o

3.2 패턴 규칙

반복적인 규칙을 간소화.

%.o: %.c
    gcc -c $< -o $@

3.3 내장 변수

  • $@: 타겟 이름.
  • $<: 첫 번째 종속성.
  • $^: 모든 종속성.

3.4 조건부 작업

ifeq ($(DEBUG), true)
CFLAGS += -g
endif

4. Makefile의 장점

장점 설명
자동화된 빌드 명령어를 수동으로 입력할 필요 없음
종속성 관리 변경된 파일만 다시 빌드하여 시간 절약
유지보수성 향상 프로젝트 구조와 빌드 과정 명확화

5. Makefile 사용 사례

5.1 C/C++ 프로젝트 빌드

CC = gcc
CFLAGS = -Wall

all: program

program: main.o utils.o
    $(CC) $(CFLAGS) -o program main.o utils.o

main.o: main.c
    $(CC) $(CFLAGS) -c main.c

utils.o: utils.c
    $(CC) $(CFLAGS) -c utils.c

clean:
    rm -f program main.o utils.o

5.2 테스트 자동화

test:
    @echo "Running tests..."
    @./test_script.sh

5.3 Docker와 연계

build:
    docker build -t my-image .

run:
    docker run -d my-image

6. Makefile 사용 시 주의점

  1. 들여쓰기:
    • 명령어 부분은 반드시 탭(tab)으로 들여쓰기.
    • 공백(space)으로 대체하면 오류 발생.
  2. 종속성 관리:
    • 모든 타겟과 종속성을 명확히 정의해야 올바른 빌드 가능.
  3. 변수 관리:
    • 변수명을 명확히 정의하고, 중복 사용을 피해야 유지보수성이 향상.

7. 결론

Makefile은 빌드 자동화와 프로젝트 관리의 필수 도구로, 특히 C/C++ 개발에서 중요한 역할을 합니다.
변수와 규칙을 활용하여 효율적이고 유지보수 가능한 빌드 환경을 구축할 수 있습니다.

'Docker' 카테고리의 다른 글

Surface Area  (0) 2024.12.04
Docker 이미지 레이어  (0) 2024.12.04
Docker 레지스트리  (0) 2024.12.03
Dockerfile과 Alpine  (0) 2024.12.03
BusyBox와 Debian 비교  (0) 2024.12.03
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유