2013-10-01 3 views
0

규칙을 평가하기 전에 특정 조건을 강제로 적용 할 수 있습니까?규칙 이전의 Makefile 필수 구성 요소

예 :

FOOPATH = $(shell which foo) 
ifndef $(FOOPATH) 
    echo "Error: foo is not avaliable." 
    # abort make 
endif 

PS : 나는 전제 조건을 추가 할 수있는 솔루션을 찾는 게 아니에요

답변

2

FOOPATH (전체 메이크 푸에 의존해야하기 때문에) foo는에 따라 모든 규칙을 = $ (foo는 쉘)

ifeq ($(FOOPATH),) 
$(error foo is not available) 
endif 

(가 비어있는 경우에도 FOOPATH가 정의되어 있습니다.)

EDIT : 수정 - 나는 틀렸어. ifndef; 변수가 정의되었지만 값이 비어 있으면 true을 반환합니다. 때문에 FOOPATH에 값이 할당되는 방식의 기록으로 그러나은 작동하지 않습니다 :

FOOPATH = $(shell which foo) 

FOOPATH의 값은 문자 그대로 "$ (foo는 쉘)"입니다, 그래서 ifndef은 참으로 평가하지 않습니다 오류가 표시되지 않습니다. 변수 이름 아니라 그 값 (예컨대 FOOPATH하지 $(FOOPATH))으로

또한
FOOPATH := $(shell which foo) # <-- note the colon 

, ifndef 적용한다 : 용액은 simply expanded variable를 사용하는 것이다. //www.chemie.fu-berlin : 자세한 내용은

ifndef FOOPATH 
$(error foo is not available) 
endif 
+1

에서 도움 내 최종 솔루션입니다. de/chemnet/use/info/make/make_7.html) var가 "비어 있지 않은 값을 가졌을 때"'ifdef' evaluateetes가 – RSFalcon7

+0

@ RSFalcon7 : 절대적으로 옳습니다. 수정 중 ... – Beta

+0

당신은'ifndef'에 대해 옳았 습니다만,'$ (FOOPATH)'의 값은'$ (shell which foo)'의 결과입니다, 나는 – RSFalcon7

0

,이 많은, [페이지] (HTTP에 따라 @Beta

FOOPATH = $(shell which ls 2>/dev/null) 

ifeq ($(FOOPATH),) 
$(error foo is not avaliable) 
else 
$(warning foo is avaliable in $(FOOPATH)) 
endif 

all: 
    @echo "rule all executed" 
관련 문제