기록

Makefile 사용법과 매개변수 전달 방법 정리 본문

DevOps

Makefile 사용법과 매개변수 전달 방법 정리

zyin 2025. 3. 26. 22:23

시작하면서

프로젝트를 자동화할 때 Makefile을 잘 활용하면 반복적인 커맨드를 단순화할 수 있다. 여기서는 기본 사용법과 매개변수(인자) 전달 방법을 간략하게 정리한다.

Makefile 기본 구조

<타겟명>:
	<실행할 명령>

예시:

build:
	./gradlew build

run:
	docker-compose up -d

터미널에서 실행:

make build
make run

여러 명령어 연결

full-deploy:
	./gradlew build
	docker-compose build
	docker-compose up -d

매개변수 전달 방법

Makefile 내부에서 쉘 변수를 받아 사용하는 방법이 있다.

방법 1: 환경변수 형태로 전달

print-env:
	echo $(MY_VAR)

실행:

make print-env MY_VAR=hello

결과:

hello

방법 2: 인자 파싱 (내부 변수를 따로 선언)

JAR_NAME=default.jar

build:
	echo "빌드할 JAR 파일: $(JAR_NAME)"

실행:

make build JAR_NAME=service-config-1.0.0.jar

동적으로 값 가져와서 사용하기

Makefile 내에서도 쉘 커맨드 실행 결과를 변수로 받을 수 있다.

run-config:
	@export JAR_FILE=$$(ls service-config/build/libs/*.jar | xargs -n 1 basename) && \
	echo "빌드된 JAR 파일: $$JAR_FILE" && \
	docker build -t service-config:1.0.0 --build-arg JAR_FILE=$$JAR_FILE -f ./Dockerfile ./service-config/build/libs && \
	docker-compose up -d service-config

  • 각 명령 앞에 @를 붙이면 커맨드 출력 없이 실행된다.
  • && 를 사용하면 한 줄에 여러 명령을 연결할 수 있다.
  • make help 타겟을 정의해 두면 사용법을 보기 좋게 안내할 수 있다.
help:
	@echo "make build        - 프로젝트 빌드"
	@echo "make run-config   - 컨피그 서버 빌드 & 실행"

마무리

Makefile은 반복 작업을 자동화하고, 인자를 받아 동적으로 실행할 수 있는 강력한 도구다. 프로젝트 빌드, 도커 빌드, 배포 스크립트 등을 표준화하는 데 적극적으로 활용할수 있다.