2014-02-07 8 views
1

У меня есть правило, которое проверяет, если некоторая переменная среды была установлена:правило Makefile вызывает ненужное восстановление

check-env: 
    ifndef NODE_ENV 
    $(error NODE_ENV is undefined) 
    endif 

Я тогда вещи, которые зависят от него (который должен потерпеть неудачу, если NODE_ENV не установлен):

sql/schema.js: sql/schema.sql check-env 
    ... 

Моя проблема заключается в том, что check-env всегда вызывает восстановление, что я должен на самом деле делать, чтобы достичь того, чего я хочу в разумно модульным способом?

ответ

1

Почему вы делаете это в рецепте цели? Почему бы просто не поместить его в основную часть вашего файла makefile?

ifndef NODE_ENV 
    $(error NODE_ENV is undefined) 
endif 

Если вы действительно хотите, чтобы это было сделано с помощью правил, ваш лучший выбор (при условии, что вы используете «нового достаточно» версии GNU Make) является использование предпосылок порядка только так:

check-env: 
     $(if $(NODE_ENV),,$(error NODE_ENV is undefined)) 

sql/schema.js: sql/schema.sql | check-env 
     ... 

(обратите внимание на символ трубы |). Подробнее см. В руководстве.

+0

Просто потому, что никогда не требуется правило в Makefile для этой переменной. –

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