.GNU의 모든 규칙이 파일을 생성합니까?


17

나는 기본적으로 모든 규칙을 만들기 전에 기본적으로 먼저 넣어야한다는 해석이 잘못 되었습니까?

.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

답변:


23

Clark Grubb의 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동작 이 중단 될 수 있습니다.


1
스타일 가이드에서 우수한 점유율. 감사합니다.
tarabyte

2

나는 규칙을 따르는 것이 좋으며 전체 규칙 레시피 후에도 조각을 넣는 것이 내 gmake (3.81)에서도 작동하는 것이 좋습니다.

예 :

#Makefile
all:
   @echo hello world
.PHONY: all

CMD :

$ touch all
$ make all    #this would be a no-op if all weren't a phoney target
  hello world 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.