수색…


파일이 아닌 대상에 .PHONY 사용

.PHONY 를 사용하여 파일이 아닌 대상을 지정하십시오 (예 : clean 또는 mrproper .

좋은 예

.PHONY: clean
clean:
    rm *.o temp

나쁜 예

clean:
    rm *.o temp

좋은 예에서 make 것을 알고 clean 그것이 여부를 최신 상태로 유지하고 조리법을 실행할 경우에 따라서는 검색하지 않습니다, 파일이 아닙니다.

나쁜 예제에서 makeclean 이라는 파일을 찾을 것입니다. 존재하지 않거나 최신 상태가 아니면 레시피를 실행할 것입니다. 그러나 레 코딩이 존재하고 최신 상태 인 경우 레서피는 실행되지 않습니다.

'make'명령의 재귀 호출에 .PHONY 사용

Make를 재귀 적으로 사용한다는 것은 make를 makefile 내에서 명령으로 사용한다는 것을 의미합니다. 이 기술은 큰 프로젝트에 각각 하위 메이크 파일이있는 하위 디렉토리가있는 경우에 유용합니다. 다음 예제는 .PHONY를 재귀 적 make와 함께 사용하는 이점을 이해하는 데 도움이됩니다.

/main
     |_ Makefile
     |_ /foo
            |_ Makefile
            |_ ... // other files
     |_ /bar
            |_ Makefile
            |_ ... // other files
     |_ /koo
            |_ Makefile
            |_ ... // other files

main의 메이크 파일 내에서 서브 디렉토리의 makefile을 실행하기 위해서, 메인의 makefile은 아래에 보여지는 것처럼 루핑 될 것입니다 (이것은 달성 될 수있는 다른 방법이 있지만 그것은 현재 토픽의 범위를 벗어납니다)

SUBDIRS = foo bar koo

subdirs:
        for dir in $(SUBDIRS); do \
          $(MAKE) -C $$dir; \
        done

그러나이 방법에는 함정이 있습니다.

  1. Sub-make에서 발견 된 오류는이 규칙에서 무시되므로 오류가 발생하더라도 나머지 디렉토리를 계속 빌드합니다.
  2. Make의 능력 수행 하나의 규칙 만 사용되기 때문에 여러 빌드 타겟의 병렬 실행은 활용되지 않습니다.

하위 디렉토리를 .PHONY 대상으로 선언하면 (하위 디렉토리가 항상 존재하므로 분명히해야하며, 그렇지 않으면 빌드되지 않습니다) 이러한 문제를 극복 할 수 있습니다.

SUBDIRS = foo bar koo

.PHONY: subdirs $(SUBDIRS)

subdirs: $(SUBDIRS)

$(SUBDIRS):
        $(MAKE) -C $@


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow