2014-12-03 2 views
2

Согласно this link, кажется, что оба эти условия будут оцениваться с одинаковыми результатами, так в чем же разница между ними?

ifeq ($(foo),) 
    execute somethings 
endif 

и

ifndef foo 
    execute somethings 
endif 

ответ

3

IFDEF/IfNDef не растягиваются переменную.

Пример, который показывает различное поведение:

bar = 
foo = $(bar) 

ifndef foo 
$(info yes) 
else 
$(info no) 
endif 

ifeq ($(foo),) 
$(info yes) 
else 
$(info no) 
endif 

Выход:

no 
yes 

Первый видит значение "$ (бар)" и выходит из строя. Второй расширяет переменные внутри foo, поэтому он становится «", и он проходит.

+0

Цитата из руководства: «Обратите внимание, что ifdef проверяет, имеет ли переменная значение. Оно не расширяет переменную, чтобы увидеть, не является ли это значение непустым». –

+1

Обратите внимание, что 'ifndef foo ...' очень похож на 'ifeq (, $ (value foo)) ...'. Также не будет жаловаться, когда действует '--warn-undefined-variables'. – bobbogo

Смежные вопросы