.PHONY
는 가상 타겟(Phony Target)을 선언하기 위해 사용하는 키워드입니다. 이름의 유래와 사용하는 이유를 아래에 설명하겠습니다.
1. .PHONY
의 의미와 유래
- "Phony"라는 단어는 영어로 "가짜의" 또는 "허구의"라는 뜻을 가지고 있습니다.
- Makefile에서
.PHONY
는 실제로 존재하지 않는 가상 타겟을 의미하며, 파일 시스템의 상태와 관계없이 항상 실행되도록 만듭니다. - 이 이름은
make
도구가 초기 설계될 때부터 사용되었으며, 의미를 직관적으로 전달하기 위해 선택된 것으로 보입니다.
2. .PHONY
가 필요한 이유
Makefile은 파일 기반 빌드 시스템으로 설계되었습니다. 이는 타겟 이름과 동일한 파일이 있으면 해당 타겟이 "최신 상태(up-to-date)"라고 간주되고, 다시 실행하지 않는 방식으로 동작합니다.
.PHONY
는 이 기본 동작을 무시하고 타겟을 항상 실행하도록 하기 위해 사용됩니다.
예제: .PHONY
가 없는 경우
clean:
rm -rf logs reports
make clean
을 실행하면logs
와reports
디렉토리를 삭제합니다.- 그러나 이후 파일 이름이
clean
인 파일이 생성되면,make
는 이를 "최신 상태"라고 간주하고clean
타겟을 실행하지 않습니다.
.PHONY
를 사용하는 경우
.PHONY: clean
clean:
rm -rf logs reports
.PHONY
를 선언하면make
는clean
타겟을 항상 실행합니다.- 파일 이름과 상관없이 "가상 타겟"으로 처리되기 때문입니다.
3. .PHONY
를 사용하는 타겟의 특징
- 파일과 독립적: 타겟 이름과 동일한 파일이 존재하더라도 항상 실행됩니다.
- 명령 중심: 파일 생성이 목적이 아니라 특정 명령 실행이 목적일 때 주로 사용됩니다.
- 빌드 과정 최적화: 불필요한 파일 기반 상태 검사를 건너뛰어 실행 속도를 높입니다.
4. .PHONY
를 사용하는 타겟의 예
.PHONY
는 아래와 같은 경우에 자주 사용됩니다:
1) 클린업(clean)
.PHONY: clean
clean:
rm -rf logs reports
- 빌드 결과물을 삭제하는 타겟.
2) 헬프(help)
.PHONY: help
help:
@echo "Available targets:"
@echo " build - Build the project"
@echo " clean - Remove build artifacts"
- Makefile 사용법을 출력하는 타겟.
3) 조건부 실행(gzip_step 같은 경우)
.PHONY: gzip_step
gzip_step:
-@\gzip -f reports/*
- 파일 생성과 관계없이 항상 실행해야 하는 명령.
5. .PHONY
라는 이름의 적합성
.PHONY
는 타겟이 파일 시스템 상태에 의존하지 않는 "가상"이라는 특성을 직관적으로 나타냅니다.
- 다른 이름을 사용할 수도 있었겠지만, "가짜 타겟"이라는 의미가 명확하게 전달되는
PHONY
가 적합한 이름으로 선택된 것입니다. - 이 이름은 Make의 철학과 설계 원칙에 잘 맞기 때문에 널리 사용되고 있습니다.
6. 요약
.PHONY
는 Makefile에서 타겟을 파일과 독립적으로 항상 실행되게 만듭니다.- 이름의 유래는 "가짜 타겟"을 의미하는 영어 단어 "Phony"에서 왔습니다.
- 파일 생성이 목적이 아닌 명령 실행 중심의 타겟에 반드시 사용하는 것이 좋습니다.
'IT > Software' 카테고리의 다른 글
Makefile - 예약 및 특수 변수 정리: 효율적인 Makefile 작성 가이드 (0) | 2024.11.22 |
---|---|
Makefile - target: $(if $(findstring gzip,$(MAKECMDGOALS)),gzip_step) (0) | 2024.11.22 |
Marp for VS Code - 커스텀 테마 경로 설정 (0) | 2024.06.18 |
Makefile 의 대입 연산자 - ?= vs = (1) | 2024.06.04 |
엑셀에서 특정 값인 셀 배경 자동으로 바꾸기 (0) | 2024.05.14 |