Что делать @, - и + делать в качестве префиксов строк рецептов в 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 теперь кажется "рецептами".