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

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

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

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

Ответ 1

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

  • @ подавляет нормальное "эхо" выполняемой команды.

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

  • + означает "выполнить эту команду в make -n" (когда команды обычно не выполняются).

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

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

Ответ 2

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

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

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

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