suyeonme

Makefile이란? 본문

프로그래밍👩🏻‍💻/기타

Makefile이란?

suyeonme 2024. 7. 7. 22:57

Makefile이란?

Makefile은 make라는 빌드 자동화 도구에서 사용하는 파일로, 프로젝트를 빌드, 테스트, 배포하는 작업을 자동화하는 데 사용되는 파일이다.  Python, C언어, Java등 다양한 언어에서 사용한다.

 

최근에 프론트엔드는 Next.js, 서버는 Python으로 구성된 모노레포 프로젝트를 보다가 Makefile을 발견했다.

Makefile은 Java에서는 Maven이나 Gradle, Javascript에서는 NPM script등의 빌드 도구로 대체할 수 있다.

Makefile 구성

  • Target: 빌드할 파일 또는 수행할 작업의 이름
  • Dependency: 타겟이 의존하는 파일이나 타겟, 종속성이 변경되면 타겟을 다시 빌드함
  • Command: 타겟을 빌드하기 위해 수행할 명령
  • .PHONY: make 명령이 실행되는 디렉토리에 Makefile의 target과 같은 이름의 파일이 존재할 경우에 충돌이 발생하는데 .PHONY에 명시하여 회피할 수 있다.

예를 들어, 코드를 포매팅하고 싶다면 make format을 입력하면 된다.

# 변수 정의
VENV = venv
PYTHON = $(VENV)/bin/python
PIP = $(VENV)/bin/pip
BLACK = $(VENV)/bin/black
FLAKE8 = $(VENV)/bin/flake8
PYTEST = $(VENV)/bin/pytest

# 기본 타겟
.PHONY: all
all: install lint test

# 가상 환경 설정
.PHONY: venv
venv:
    python3 -m venv $(VENV)

# 패키지 설치
.PHONY: install
install: venv
    $(PIP) install -r requirements.txt

# 코드 포매팅
.PHONY: format
format: venv
    $(BLACK) .

# 린트 검사
.PHONY: lint
lint: venv
    $(FLAKE8) .

# 테스트 실행
.PHONY: test
test: venv
    $(PYTEST)

Makefile.venv

Makefile.venv 파일은 Python 프로젝트에서 가상 환경(virtual environment)을 설정하고 관리하는 Makefile이다. 따라서 Makefile.venv를 만들면 따로 가상환경을 만들지않아도 된다. 

.gitignore에 등록해서 사용하면 된다!
# 가상 환경 생성 및 패키지 설치
make -f Makefile.venv
# 가상 환경 활성화
source .venv/bin/activate
# 패키지 업데이트
make -f Makefile.venv update
# 가상 환경 삭제
make -f Makefile.venv clean

 

Comments