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

172

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

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

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

Мэтт Джойнер
источник

Ответы:

235

Они управляют поведением 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 упоминается использование +.)

Джонатан Леффлер
источник
41

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

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

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

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

ТЕД
источник