
У меня есть вопрос по строке в Makefile. У меня есть цель "очистить" мой локально установленный test/staging-server. В настоящее время это выглядит так:
clean:
rm -rf $(LOCAL_SERVER_PATH)/*
Пока переменная LOCAL_SERVER_PATH
определена и выглядит примерно /srv/www/htdocs
так, все в порядке. Но... что, если пользователь допустил ошибку и неправильно ввел определение переменной, или какой-то шаг конфигурации пошел не так, и Makefile был создан с неправильным определением.
По сути, я опасаюсь, что по ошибке я могу получить неопределенный $(LOCAL_SERVER_PATH)
, и тогда моя цель уступит место:
clean:
rm -rf /*
Можно ли переделать мой Makefile, чтобы сделать его более устойчивым к таким ошибкам? Я не хочу получить Makefile, который может потенциально уничтожить всю мою установку Linux (или даже ее части, поскольку мой пользователь не «root»).
решение1
Как уже отмечалось, проверьте переменную, чтобы убедиться, что она не пустая:
clean:
test -n "$(LOCAL_SERVER_PATH)" && rm -rf $(LOCAL_SERVER_PATH)/*
Та же идиома появляется в большом количестве файлов спецификаций RPM, где, кажется, переменная BUILD_ROOT
известна как неустановленная. Поскольку ее замена не является универсально доступной (несмотря на комментарии некоторое время назад вRe: [Fedora-packaging] Поэтапный отказ от buildroot?), его все еще можно встретить здесь и там.
решение2
Вместо использования test
команды вы можете проверить наличие переменной в Makefile и поступить по-другому — например, показать пользователю ошибку, тем самым отказавшись от запуска Makefile:
ifeq (,$(LOCAL_SERVER_PATH))
$(error Set LOCAL_SERVER_PATH variable to run this Makefile)
endif