2011-05-16 2 views
12

내 메이크 파일에서 장황한 컴파일을 사용하고 싶지만 조건부를 만드는 방법을 알아낼 수 없다. OR. 메이크 파일에서 조건부 OR

설명해 드리죠 : 나는 V=1 또는 VERBOSE=1을 설정하여 자세한 컴파일을 지정 할 수 있어야합니다. 나는 우리가 그것을 사용할 수 있도록 (그리고 VERBOSE 만 알고 다른 메이크 파일 사용)

일부 스크립트를 가지고 있기 때문에 VERBOSE=1는 계속 사용할 수 있도록 그래서 결과는이 두 명령이 동일한 지해야합니다 :

make all VERBOSE=1 # pain to write 
make all V=1 

: 내가 달성하고 싶은 무엇

ifdef VERBOSE 
[issue compilation commands with verbose mode] 
endif 

은 C의 전처리에 가까운 : 자, 내 메이크이 오늘처럼 보인다

어떻게하는지 알고 계십니까?

+0

ifeq http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or –

답변

11

I는 다음과 같이 수행하십시오 유사

ifneq "$(or $(LINUX_TARGET),$(OSX_TARGET))" "" 

endif 

을 $ (스트립 접근하지만,보다 직관적 $를 사용하여 (또는 키워드

+1

Niiiiice,이 방법이 더 명확합니다. 나는 또는에 대해 몰랐다. – Gui13

+0

의미 상 정확하게 내 문제를 해결하기 때문에 답변을 수락했습니다. – Gui13

4

내가 아는 한, GNU make의 조건부 항목은 OR과 ANDS를 허용하지 않습니다. 당신은 항상 같은 것을 할 수있는 :

ifdef VERBOSE 
DOVERBOSE = yes 
endif 
ifdef V 
DOVERBOSE = yes 
endif 

ifeq($DOVERBOSE, yes) 
    main verbose stuff here 
endif 

을하지만 당신은 (거의 자기 문서화를) 소개 처음에 V로 정의 할 필요가 왜 표시되지 않습니다.

+0

ifdef V VERBOSE = v \ endif는 어떨까요? 나머지는 그대로 두십시오. – Beta

+0

@ 베타 나쁘지 않습니다! 그러나 나는 당신의 대답을 더 좋아합니다. – Gui13

3

나는 닐 버터 워스의 접근 방식을 좋아하지만, 당신이 정말 당신이 설명하는 스타일을 수행하려는 경우, 이것은 당신에게 또는됩니다

ifneq "$(strip $(VERBOSE) $(V))" "" 
[be verbose] 
endif 
+0

그게 완벽합니다. – Gui13

3
VERBOSE := $(or $(VERBOSE),$(V)) 

은 ... 다음 ...

ifeq ($(VERBOSE),1) 
#Conditional stuff 
endif 
0

좋아, 정말 늦게 파티에,하지만 난이 건너 온 방법과 메이크에 로직을 추가 할 찾고 다른 사람을 위해 다른 솔루션을 추가하고 싶었 : 기본적으로, 쉘에서 논리를 수행하고 그런 식으로 출력을 얻으십시오.

ifneq ($(shell ([ $(VERBOSE) ] || [ $(V) ]) && echo y),) 

는 더 복잡한 것 같다,하지만 당신은 많은의 ands와 ORS와 if 문이있는 경우,이 유연성을 제공하고 .. 중첩 $ (그리고보다 쉽게 ​​읽을 수있을 것입니다 $를 (또는 .. .)).

+0

"유연성을 많이 제공합니다"- 코드를 작성한 특정 셸 (BASH)을 사용하도록 제한한다는 점을 제외하고는 – villapx