--- title: make — 빌드 자동화 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: Makefile에 적어 둔 규칙대로 컴파일·테스트·배포 명령을 순서대로 실행하는 빌드 도구. tags: 프로그램, 빌드, make --- **💬 "make 명령어"** make는 '어떤 파일이 바뀌면 어떤 명령을 다시 실행할지'를 Makefile에 적어 두고, 필요할 때만 해당 작업만 수행하는 빌드 도구입니다. 여섯 단계의 배포 명령을 외울 필요 없이 make deploy 하나로 실행할 수 있게 해 주며, 변경된 파일만 다시 처리해 반복 빌드 시간을 줄여 줍니다. - **Makefile**: 작업 이름과 실행 명령을 적어 둔 규칙 파일 - **타깃(target)**: make <이름>으로 부르는 작업 단위 - **의존성**: 이 파일이 바뀌면 이 작업을 다시 실행한다는 조건 - **PHONY**: 파일로 만들지 않는 작업(예: clean)을 표시 ## 자주 쓰는 옵션 | 옵션 | 설명 | | --- | --- | | make | 기본 타깃(보통 첫 번째 타깃) 실행 | | make test | test 타깃 실행 | | 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 미리 보기와 병렬 빌드 출력 예시](https://games.cursorai.co.kr/assets/make-demo.png) 실제 운영 중인 서버 --- 원문(HTML): https://games.cursorai.co.kr/programs/dev/build/make.html