Самый фундаментальный аспект написания make-файлов для понимания - это разница между синтаксисом make-файла и синтаксисом рецепта. Makefiles - это действительно два совершенно разных языка, объединенные в один файл.
Все «нормальные» части файла makefile находятся в синтаксисе makefile, описанном в руководстве по установке. Тем не менее, рецепты (строки, отступаемые символами TAB после определения цели) не являются синтаксисом makefile, они написаны в скрипте POSIX sh (shell): программа make
примет текст с отступом по символам TAB, заменит переменную/функцию ссылки (вещи начинались с одного $
), затем передают всю вещь в оболочку, которую нужно обработать, и ждать результата (код выхода). Только синтаксический анализ рецепта сделанный make для ссылок на переменные/функции. Ничего больше.
So. В приведенном выше примере вы пытаетесь использовать makefile таких конструкций, как ifeq
внутри рецепта, для которого требуется shell. Вы не можете этого сделать, и поэтому вы получаете синтаксические ошибки, из оболочки (хотя ваша среда оболочки странная ... Я никогда не видел ни одной печати ANOMALY:
, как раньше).
Вы должны использовать раковина конструкции в рецепте; что-то вроде:
chmod -R 777 $(DEL_LIB_PATH) ; \
if [ $$? -eq 1 ]; then \
echo "chmod failed"; \
fi
Или, более кратко:
chmod -R 777 $(DEL_LIB_PATH) || echo "chmod failed"
Однако, это может быть плохой идеей, потому что, делая это, вы прячетесь ошибку от марки. Код выхода вашего рецепта теперь всегда успешный, даже если что-то не удается. Возможно, это то, чего вы хотите, но, возможно, нет. При работе с рецептами вы всегда должны тщательно думать о том, как рецепт может потерпеть неудачу, и убедитесь, что если вы хотите его заметить, вы выходите с кодом ошибки, отличным от 0.
Я действительно не знаю, почему вы хотите в любом случае повторить сообщение здесь. Если chmod
не удается, то будет печатать свои собственные ошибки, о том, почему это не удалось: почему не только пусть те сообщения будет достаточно, и просто использовать:
chmod -R 777 $(DEL_LIB_PATH)
как ваш рецепт?