При попытке проверить отказ команды в Makefile (в данном случае jekyll build relative
) переменная $$?
должна содержать код выхода последней команды. При тестировании этот код показан как 127. Однако я хотел бы присвоить его переменной LAST_EXIT
, так что следующий оператор if может проверить, была ли выполнена или не выполнена выполняемая команда.Как присвоить значение переменной в Makefile?
Проблема в том, что LAST_EXIT
никогда не получает значение, назначенное ему, как показано в приведенном ниже коде. Любые предложения по устранению этой проблемы?
Код:
LAST_EXIT = 0
all:
@echo "Building the website... Running command:"
- jekyll build relative || LAST_EXIT=$$?
- jekyll build relative || echo $$? and $(LAST_EXIT)
ifeq ($(LAST_EXIT), 0)
#echo a message indicating success
Выход:
jekyll build relative || LAST_EXIT=$?
/bin/sh: jekyll: command not found
jekyll build relative || echo $? and 0
/bin/sh: jekyll: command not found
127 and 0
Спасибо за вашу помощь, я думаю, что я использую другую систему, чем вы в re, поэтому запуск кода Makefile привел к этой ошибке: '/ bin/sh: line 0: [: ==: unary operator expected' Я решил решить эту проблему, просто написав скрипт, который проверяет, установлен ли Jekyll или нет. Формат 'if ... fi' отлично работает в моем скрипте bash, хотя мне пришлось изменить тест равенства. –