В руководстве по сборке GNU Makefile упоминаются эти префиксы.
Если указан .ONESHELL, то только первая строка рецепта будет проверяться на наличие специальных префиксных символов ('@', '-' и '+').
Что делают эти префиксы и где они упоминаются?
В руководстве по сборке GNU Makefile упоминаются эти префиксы.
Если указан .ONESHELL, то только первая строка рецепта будет проверяться на наличие специальных префиксных символов ('@', '-' и '+').
Что делают эти префиксы и где они упоминаются?
Они управляют поведением 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 упоминается использование +
.)
@
предотвращает вывод командной строки на консоль. Вы можете сделать это глобально с -s
или--keep-silent
-
заставляет make продолжать работу, даже если по какой-то причине команда не работает. Вы можете сделать это глобально через -i
флаг (или --ignore-errors
).
+
Я не был знаком с вами до того, как вы спросили. Насколько я могу сказать, что сводит на нет эффект -n
, -t
и -q
, все из которых в основном говорят сделать на самом деле не запускать команды. Так что в +
любом случае линия с передней частью будет проложена.
Если вы прочитали официальное руководство по Gnu Make, все они упомянуты в главе 5 . В моей старой копии руководства, которая была главой о «командах», но термин du jour теперь кажется «рецептами».