clean
저는 OS X (GNU Make 3.81 - XCode에서) 에서 GNU Makefile에 대한 재귀 타겟을 작성하려고 합니다 . GNU Make 문서에 따르면 나는 다음을 생각해 냈습니다:
메인 메이크파일
ALLSUBMAKES=$(wildcard ./*/Makefile)
ALLSUBDIRS=$(patsubst %/Makefile,%,$(ALLSUBMAKES))
.PHONY: submakes clean $(ALLSUBDIRS)
submakes: $(ALLSUBDIRS)
clean: $(ALLSUBDIRS)
$(ALLSUBDIRS):
$(MAKE) -C $@
하위 메이크 파일
mainTarget:
#do something here
clean:
#some clean operation
질문:
대상 및 기타 모든 명령줄 옵션(예: )을 무시하고 실행 파일의 전체 경로 이름 $(MAKE)
만 전달되는 것을 발견했습니다 . 최상위 수준에서 방출 하면 결국 모든 하위 제작이 실행됩니다. 이 재귀적 정리 목표를 달성하는 올바른 방법은 무엇입니까? 아니면 모든 명령줄 매개변수와 함께 대상을 하위 프로덕션에 전달하는 방법은 무엇입니까?make
-j5
mainTarget
make clean
답변1
내가 본 방법은 모든 대상을 각 하위 디렉터리로 이동하는 하나의 규칙으로 수집하는 것입니다.
build clean install:
@for dir in $(ALLSUBDIRS); do $(MAKE) -C "$$dir" $@; done
MAKEFLAGS
하위 브랜드로 자동으로 내보내지는 내장 변수를 사용하여 작업을 수행 할 수도 있습니다 .
대상 뒤에 원하는 작업을 추가한 다음 이 의사 대상을 분할하여 나중에 작업을 다시 추출할 수 있습니다.
default: $(addsuffix .default,$(ALLSUBDIRS))
clean: $(addsuffix .clean,$(ALLSUBDIRS))
%.default:
$(MAKE) -C $*
%.clean:
$(MAKE) -C $* clean