makefile
.PONY 타겟
수색…
파일이 아닌 대상에 .PHONY 사용
.PHONY
를 사용하여 파일이 아닌 대상을 지정하십시오 (예 : clean
또는 mrproper
.
좋은 예
.PHONY: clean
clean:
rm *.o temp
나쁜 예
clean:
rm *.o temp
좋은 예에서 make
것을 알고 clean
그것이 여부를 최신 상태로 유지하고 조리법을 실행할 경우에 따라서는 검색하지 않습니다, 파일이 아닙니다.
나쁜 예제에서 make
는 clean
이라는 파일을 찾을 것입니다. 존재하지 않거나 최신 상태가 아니면 레시피를 실행할 것입니다. 그러나 레 코딩이 존재하고 최신 상태 인 경우 레서피는 실행되지 않습니다.
'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
그러나이 방법에는 함정이 있습니다.
- Sub-make에서 발견 된 오류는이 규칙에서 무시되므로 오류가 발생하더라도 나머지 디렉토리를 계속 빌드합니다.
- 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