Я нашел с лучшим ответом, не может использоваться как требование, за исключением других целей PHONY.При использовании в качестве зависимости для цели, являющейся фактическим файлом, использование check-env
приведет к перестроению этой цели.
Другие ответы являются глобальными (например, переменная требуется для all цели в Makefile) или использовать оболочку, например, если ENV отсутствовал, make завершит работу независимо от цели.
Решение, которое я нашел для обеих проблем:
ndef = $(if $(value $(1)),,$(error $(1) not set))
.PHONY: deploy
deploy:
$(call ndef,ENV)
echo "deploying $(ENV)"
.PHONY: build
build:
echo "building"
Вывод выглядит следующим образом
$ make build
echo "building"
building
$ make deploy
Makefile:5: *** ENV not set. Stop.
$ make deploy ENV="env"
echo "deploying env"
deploying env
$
value
есть несколько страшных предостережений, но я считаю, что для этого простого использования это лучший выбор.