Что делают @, - и + в качестве префиксов к строкам рецептов в Make?

В руководстве GNU Makefile эти префиксы упоминаются.

Если указан .ONESHELL, то только первая строка рецепта будет проверяться на наличие специальных префиксных символов («@», «-» и «+»).

Что делают эти префиксы и где они упоминаются?


person Matt Joiner    schedule 13.08.2010    source источник


Ответы (2)


Они управляют поведением make для отмеченных командных строк:

  • @ подавляет обычное «эхо» выполняемой команды.

  • - означает игнорирование статуса выхода выполняемой команды (обычно ненулевой статус выхода останавливает эту часть сборки).

  • + означает «выполнить эту команду под make -n» (или «make -t» или «make -q»), когда команды обычно не выполняются. См. Также спецификацию POSIX для make, а также §9.3 руководства GNU Make.

Обозначение + является (стандартизованным POSIX) обобщением де-факто (нестандартизованного) механизма, в соответствии с которым командная строка, содержащая ${MAKE} или $(MAKE), выполняется под make -n.

(@ обсуждается в §5.2 документа GNU Make руководство; - описано в §5.5; и §5.7.1 упоминает использование +.)

person Jonathan Leffler    schedule 13.08.2010

@ предотвращает вывод командной строки на консоль. Вы можете сделать это глобально с помощью -s или --keep-silent

- заставляет make продолжать работу, даже если команда по какой-то причине не выполняется. Вы можете сделать это глобально с помощью флага -i (или --ignore-errors).

+ Я не был знаком с ним до того, как вы спросили. Насколько я могу судить, он сводит на нет эффект -n, -t и -q, все из которых в основном говорят программе make не запускать команды. Так что линия с + впереди все равно будет запущена.

Если вы читаете официальное руководство по Gnu Make, все они упомянуты в главе 5 < / а>. В моем старом экземпляре руководства это была глава, посвященная «командам», но теперь термин du jour, кажется, означает «рецепты».

person T.E.D.    schedule 13.08.2010