Что делают @, - и + как префиксы для строк рецепта в Make? - PullRequest
154 голосов
/ 13 августа 2010

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

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

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

Ответы [ 2 ]

197 голосов
/ 13 августа 2010

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

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

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

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

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

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

36 голосов
/ 13 августа 2010

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

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

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

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

...