В руководстве 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
, все из которых в основном говорят программе make не запускать команды. Так что линия с +
впереди все равно будет запущена.
Если вы читаете официальное руководство по Gnu Make, все они упомянуты в главе 5 < / а>. В моем старом экземпляре руководства это была глава, посвященная «командам», но теперь термин du jour, кажется, означает «рецепты».