.PHONY GNU의 모든 규칙이 파일을 만들까요?

.PHONY GNU의 모든 규칙이 파일을 만들까요?

내 설명이 틀렸다면 기본적으로 모든 규칙을 우선적으로 적용해야 합니다.

.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 

관련 정보