Хорошо, вот мое собственное решение, которое, к сожалению, не основано на коде состояния скрипта collect_sources.py, но которое работает для меня (TM) и позволяет мне увидеть любой вывод, который генерирует скрипт:
SHELL_OUTPUT := $(shell python collect_sources.py 2>&1)
ifeq ($(filter error: [Errno %],$(SHELL_OUTPUT)),)
$(info $(SHELL_OUTPUT))
else
$(error $(SHELL_OUTPUT))
endif
Сценарий написан так, что любая ошибка приводит к выводу, начинающемуся с "collect_sources: error:"
. Кроме того, если python не может найти или выполнить данный скрипт, он выводит сообщение об ошибке, содержащее сообщение "[Errno 2]"
или подобное. Так что этот маленький кусочек кода просто захватывает выходные данные (перенаправляет stderr на stdout) и ищет сообщения об ошибках. Если ничего не найдено, он просто использует $(info)
для вывода на печать, в противном случае он использует $(error)
, что эффективно делает Make stop.
Обратите внимание, что отступ в ifeq ... endif
делается с пробелами. Если используются вкладки, Make думает, что вы пытаетесь вызвать команду, и жалуется на это.