2011-11-06 5 views
3

재귀 적 make 호출에 의해 -w 플래그가 설정되지 않은 상태에서 makefile을 실행하고 싶습니다. 플래그는 make 명령 행에서 --no-print-directory입니다.Makefile 자체에서 --no-print-directory를 지정하는 방법

해당 플래그를 메이크 파일 자체 내에 지정할 수 있습니까?

나는 당신이 호출 메이크의 .SILENT: 특별 대상을 포함 할 수

$(if $(VERBOSE),,MAKEFLAGS += no-print-directory)) 

감사처럼 아마도 뭔가하는 상세 모드에서이 플래그를 의존 댄

답변

6

예, 단지 MAKEFLAGS---no-print-directory를 추가하는 것만으로는 충분해야하지만, 당신은 conditional functions하지, 그 conditional directives 함께 할 수 있습니다

ifndef VERBOSE 
MAKEFLAGS += --no-print-directory 
endif 
+0

나 교육 제발, 왜? – dbbd

+0

이것은 [변수 할당] (http://www.gnu.org/software/make/manual/make.html#Setting)이 확장 내에서 발생할 수 없기 때문입니다.이 확장은 [How Make parses makefiles] (http://www.gnu.org/software/make/manual/make.html#Makefile-Contents). 변수 할당 (또는 규칙 정의와 같은 다른 것)을 확장 가능한 코드 ('$ (if ...) ')에 포함시키는 유일한 방법은 ['eval']입니다 (http://www.gnu.org/ 소프트웨어/make/manual/make.html # Eval-Function) 기능. 그러나 특히 간단한 경우 조건부 지시문은'eval'보다 더 깔끔하고 명확합니다. –

+0

아, 물론 조건부 함수를 변수 할당에'MAKEFLAGS + = $ ($ VERBOSE 경우) - - no-print-directory)'와 같이 넣을 수 있습니다. 여기서 할당은 무조건 수행되지만 'VERBOSE'가 정의되어 있지 않거나 비어있는 경우 실제로 아무것도 변수에 추가되지 않습니다. –

0

을 할 계획입니다. 의 것을 포함된다는 사실을 주위에 영원히되지 않을 수도 있습니다,

foo: 
    @echo done 

참고 .SILENT is considered obsolete, 또한주의 :

all: 
    $(MAKE) -f sub.mk foo 

.SILENT: 

과 submake 메이크, sub.mk 예를 들어, 여기 최상위 메이크 당신의 메이크 파일 은 메이크 파일의 모든 명령 앞에 @을 넣은 것처럼 명령 에코를 억제하는 효과가 있습니다.

관련 문제