Рассмотрим следующий файл makefile. Я намерен называть его «make var = xxx» для нормального здания и «делать помощь» или «чистить» или «делать showVars» в другое время. Когда я делаю фактическую сборку, мне нужно убедиться, что переменная 'var' передается в командной строке, но я не требую ее для других целей, таких как clean. В настоящее время проверка сбрасывается в любое время, когда var не указывается, что является безопасным, но раздражающим и ненужным, когда вы просто чистите или обманываете. Как я могу запустить проверку только для моих целей сборки, а не в другое время?Условные проверки в make-файле
var=
$(if $(var),,$(error var was not specified at commandline!))
var_RELEASE=`echo $(var) | sed -e 's/-/_/g'`
.PHONY all showVars clean prep rpm
all: prep rpm
prep:
# Do prep work. Requires valid var and var_RELEASE
rpm:
# Build rpm. Requires valid var_RELEASE
help:
# Does not require var and var_RELEASE
showVars:
# Display all vars. Requires valid var and var_RELEASE
clean:
# Does not require var and var_RELEASE
UPDATE:
За предложение Максима ниже, используя $ (MAKECMDGOALS), чтобы проверить, какая цель была определена и игнорируя те, которые не требуют, чтобы вар быть установлено:
# Check if var is empty for prep and rpm targets, bail out if so.
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),help)
ifneq ($(MAKECMDGOALS),showvars)
$(if $(var),,$(error var was not specified at commandline! See 'make help'))
endif
endif
endif
Это работает, но это немного грубо ... возможно вообще упростить это?
Вы можете использовать 'filter':' ifeq ($ (фильтр чистой помощи showvars, $ (MAKECMDGOALS))) '' а затем проверить var' и потерпеть неудачу, если не установлены. – MadScientist