내 설명이 틀렸다면 기본적으로 모든 규칙을 우선적으로 적용해야 합니다.
.PHONY: all of my rules
all:
echo "Executing all ..."
of:
echo "Executing of ..."
my:
echo "Executing my ..."
rules:
echo "Executing rules ..."
이 "공식"을 따르고 싶지 않았던 때가 있었나요?
http://www.gnu.org/software/make/manual/make.html#Phony-Targets
답변1
클라크 그럽의Makefile 스타일 가이드제안:
- 모든 잘못된 대상은 .PHONY의 전제 조건으로 만들어 선언해야 합니다.
- 모든 잘못된 대상을 한 곳에 나열하는 대신 대상 선언 전에 각 잘못된 대상을 .PHONY의 전제 조건으로 추가합니다.
- .PHONY의 전제 조건은 파일 대상이 아니어야 합니다.
- 잘못된 대상이 파일 대상의 전제조건이 되어서는 안 됩니다.
귀하의 예에서 이는 다음을 의미합니다.
.PHONY: all
all:
echo "Executing all ..."
.PHONY: of
of:
echo "Executing of ..."
.PHONY: my
my:
echo "Executing my ..."
.PHONY: rules
rules:
echo "Executing rules ..."
PHONY
여러 대상이 허용됩니다. 이 스택 오버플로 질문도 참조하세요."Gnu makefile에 여러 개의 .PHONY 대상을 가질 수 있습니까?"
PHONY
또한 이것이 귀하의 질문에 직접 언급되지는 않았지만 대상이 프로젝트의 실제 입력 또는 중간 파일과 동일한 이름을 가지지 않도록 주의해야 합니다 . 예를 들어 프로젝트에서 rules
접미사 없이 이름이 지정된 소스 코드 파일을 가정하는 경우 대상에 해당 문자열을 포함하면 PHONY
예상되는 동작이 중단될 수 있습니다 make
.
답변2
나는 이것이 좋은 습관이라고 생각하지만, 그것을 분할하고 전체 규칙 레시피 뒤에 세그먼트를 배치하는 것도 gmake(3.81)에서도 작동합니다.
예를 들어:
#Makefile
all:
@echo hello world
.PHONY: all
주문하다:
$ touch all
$ make all #this would be a no-op if all weren't a phoney target
hello world