make — 빌드 자동화

개발 / 빌드 / make.html

빌드원문등록 2026-10-18

💬 "make 명령어"

make는 '어떤 파일이 바뀌면 어떤 명령을 다시 실행할지'를 Makefile에 적어 두고, 필요할 때만 해당 작업만 수행하는 빌드 도구입니다.

여섯 단계의 배포 명령을 외울 필요 없이 make deploy 하나로 실행할 수 있게 해 주며, 변경된 파일만 다시 처리해 반복 빌드 시간을 줄여 줍니다.

  • Makefile: 작업 이름과 실행 명령을 적어 둔 규칙 파일
  • 타깃(target): make <이름>으로 부르는 작업 단위
  • 의존성: 이 파일이 바뀌면 이 작업을 다시 실행한다는 조건
  • PHONY: 파일로 만들지 않는 작업(예: clean)을 표시

자주 쓰는 옵션

옵션설명
make기본 타깃(보통 첫 번째 타깃) 실행
make testtest 타깃 실행
make clean산출물 정리
make -j4작업을 4개까지 병렬 실행
make -n deploy실행 없이 어떤 명령이 나갈지만 미리 보기
make --dry-run-n과 동일(미리 보기)

필수 명령어 조합 3가지

  • make clean && make -j4 — 깨끗이 정리 후 병렬 빌드
  • make -n deploy — 배포 명령을 눈으로 확인한 뒤 실제 실행
  • make test && make deploy — 테스트 통과 후 배포

💬 "이 명령을 스크립트로 감싸는 예시 보여줘"

실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다.

작업 정의

빌드·테스트·배포 세 타깃을 적은 Makefile을 만듭니다.

printf 'build:\n\tgo build -o bin/app .\n\ntest:\n\tgo test ./...\n\ndeploy:\n\tscp bin/app deploy@srv:/opt/app/\n' > Makefile

미리 보기

어떤 명령이 실행될지 출력만 확인합니다.

make -n build

실행

테스트 통과 후 빌드하고 배포합니다.

make test\nmake build\nmake deploy

실무에서는 이렇게 씁니다

1. 배포 명령 7단계를 한 줄로

상황 — 테스트·빌드·압축·전송·재시작 순서를 매번 손으로 쳐야 하는 상황.

make deploy

결과 — Makefile에 적힌 순서대로 전 단계가 실행됩니다.

포인트 — 배포 전 make -n deploy로 명령 순서를 눈으로 확인하는 습관을 들입니다.

2. 변경된 소스만 다시 처리

상황 — 수천 개 파일이 있는 프로젝트에서 일부만 수정했는데 빌드가 오래 걸리는 상황.

make build

결과 — 의존성이 바뀐 타깃만 다시 실행되어 시간이 줄어듭니다.

포인트 — 의존성을 .o 파일 기준으로 정확히 적어 둘수록 생략되는 작업이 늘어납니다.

3. CI에서 같은 Makefile 재사용

상황 — 로컬에서 쓰는 명령을 CI 파이프라인에도 그대로 쓰고 싶은 상황.

make test && make build

결과 — CI 스크립트에 Makefile 타깃만 호출해 로컬과 동일한 빌드를 수행합니다.

포인트 — CI 환경에서만 필요한 값은 환경 변수로 빼두고 Makefile에는 자리 표시자로 둡니다.

주의할 점

  • Makefile은 탭(Tab)으로 시작한 줄만 명령으로 인식합니다. 공백으로 쓰면 에러가 납니다.
  • clean처럼 파일을 만드는 타깃이 아니면 .PHONY로 선언해 이름이 같은 파일과 충돌하지 않게 합니다.
  • 배포 타깃에는 항상 미리 보기(-n) 단계를 함께 두고 실수를 줄입니다.

실제 실행 화면

배포 타깃의 미리 보기와 병렬 빌드를 확인하는 가상 예시입니다(실제 실행 결과 아님).

make 미리 보기와 병렬 빌드 출력 예시

실제 운영 중인 서버

이 문서는 화면 표시용 가상 디렉터리의 항목입니다. 실제 서버 파일시스템과 연결되지 않으며, 파일 실행이나 시스템 명령을 수행하지 않습니다.