재귀적으로 OS X에서 통과 대상 만들기

재귀적으로 OS X에서 통과 대상 만들기

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-j5mainTargetmake 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

관련 정보