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